javascript - 花瓣这样的模板引擎纯手写的吗
伊谢尔伦
伊谢尔伦 2017-04-10 14:22:22
[JavaScript讨论组]

下面是花瓣的一个模板引擎,是不是先写成html再用什么工具能生成

(function(rt) {
    var templates = rt.templates,
        attrs = function() {
            return rt.attrs.apply(rt, arguments)
        }, _ = function() {
            return rt._.apply(rt, arguments)
        }, img = function() {
            return rt.img.apply(rt, arguments)
        }, imgURL = function() {
            return rt.imgURL.apply(rt, arguments)
        }, imgSize = function() {
            return rt.imgSize.apply(rt, arguments)
        }, avatar = function() {
            return rt.avatar.apply(rt, arguments)
        }, isVerified = function() {
            return rt.isVerified.apply(rt, arguments)
        }, url = function() {
            return rt.url.apply(rt, arguments)
        }, mkurl = function() {
            return rt.mkurl.apply(rt, arguments)
        }, GACampaignURL = function() {
            return rt.GACampaignURL.apply(rt, arguments)
        }, escape = function() {
            return rt.escape.apply(rt, arguments)
        }, __t = rt.templates,
        emerge = function() {
            return rt.renderSync.apply(rt, arguments)
        };
    __t["base/people_pins"] = function(locals) {
        var buf = [];
        with(locals || {}) {
            var interp, __val__ = emerge("base/header");
            buf.push(null == __val__ ? "" : __val__);
            var __val__ = emerge("base/people_layout", {
                req: req,
                user: page.user,
                ctx: "pins",
                body_tpl: "base/people_pins_body",
                page: page
            });
            buf.push(null == __val__ ? "" : __val__)
        }
        return buf.join("")
    }, __t["base/chrome_callout"] = function(locals) {
        var buf = [];
        with(locals || {}) {
            var interp;
            buf.push("

<

p"), buf.push(attrs({
                id: "chrome_callout",
                style: "display: none;",
                "class": "has-close phide"
            })), buf.push(">

<p"), buf.push(attrs({
                "class": "wrapper"
            })), buf.push("><p"), buf.push(attrs({
                "class": "intro sheet"
            })), buf.push("><span>安装花瓣的chrome采集工具,你可以方便地收集网络上的图片,<br"), buf.push(attrs({})), buf.push("/>视频及网页截图,这是花瓣的精髓所在。</span><a"), buf.push(attrs({
                target: "_blank",
                href: "#",
                onclick: "return false;",
                "class": "install-extension btn btn18 rbtn"
            })), buf.push("><strong> 安装花瓣Chrome扩展</strong><span></span></a><a"), buf.push(attrs({
                "class": "close"
            })), buf.push('></a></p></p></p><script>(function(){if(!Browser.chrome||Browser.version<18){document.id("chrome_callout").dispose();return}var a=Cookie.read("_hb_chrome_extention");!a&&!document.html.hasClass("hbChromeExtInstalled")&&document.id("chrome_callout").removeClass("has-close").show(),$$("#chrome_callout .close").addEvent("click",function(){Cookie.write("_hb_chrome_extention",!0,{duration:365}),document.id("chrome_callout").hide()}),$$("#chrome_callout .install-extension").addEvent("click",function(){return installHuabanChromeAddon(),document.id("chrome_callout").hide(),!1})})()</script>')
        }
        return buf.join("")
    }, __t["base/header_main_menu"] = function(locals) {
        var buf = [];
        with(locals || {}) {
            var interp, categories = settings.categories,
                groups = [];
            for (var i = 0, l = categories.length; i < l; i++) {
                var category = categories[i];
                if (category.display === !1) continue;
                category.nav_link = "/favorite/" + category.id + "/", groups[category.group] = groups[category.group] || [], groups[category.group].push(category)
            }
            buf.push("<p"), buf.push(attrs({
                id: "header_main_menu"
            })), buf.push("><p"), buf.push(attrs({
                "class": "inner clearfix"
            })), buf.push("><p"), buf.push(attrs({
                "class": "left-module"
            })), buf.push("><a"), buf.push(attrs({
                href: "/following/",
                "class": "main-link bold following"
            })), buf.push(">我的关注</a><a"), buf.push(attrs({
                href: "/all/",
                "class": "main-link bold all with-line"
            })), buf.push(">最新采集</a><a"), buf.push(attrs({
                href: "/design/?md=top",
                "class": "main-link design"
            })), buf.push(">花瓣设计</a><a"), buf.push(attrs({
                href: "/ent/?md=top",
                "class": "main-link ent"
            })), buf.push(">花瓣娱乐<i"), buf.push(attrs({
                "class": "new-icon"
            })), buf.push("></i></a><a"), buf.push(attrs({
                href: "/gift/?md=top",
                "class": "main-link gift"
            })), buf.push(">花瓣礼物</a><a"), buf.push(attrs({
                href: "/weekly/",
                "class": "main-link weekly"
            })), buf.push(">周刊</a><a"), buf.push(attrs({
                target: "_blank",
                href: "http://visionblog.huaban.com/",
                "class": "main-link visionblog with-line"
            })), buf.push(">访谈</a><a"), buf.push(attrs({
                target: "_blank",
                href: "/apps/",
                "class": "main-link apps"
            })), buf.push(">移动应用</a></p><p"), buf.push(attrs({
                "class": "right-module"
            })), buf.push("><p"), buf.push(attrs({
                "class": "row-0"
            })), buf.push("><p"), buf.push(attrs({
                "class": "group"
            })), buf.push(">");
            for (var $index = 0, $$l = groups[0].length; $index < $$l; $index++) {
                var cat = groups[0][$index];
                buf.push("<a"), buf.push(attrs({
                    href: cat.nav_link
                })), buf.push(">" + escape((interp = cat.name) == null ? "" : interp) + "</a>")
            }
            buf.push("</p></p><p"), buf.push(attrs({
                "class": "row-1"
            })), buf.push("><p"), buf.push(attrs({
                "class": "group"
            })), buf.push(">");
            for (var $index = 0, $$l = groups[1].length; $index < $$l; $index++) {
                var cat = groups[1][$index];
                buf.push("<a"), buf.push(attrs({
                    href: cat.nav_link
                })), buf.push(">" + escape((interp = cat.name) == null ? "" : interp) + "</a>")
            }
            buf.push("</p><p"), buf.push(attrs({
                "class": "group"
            })), buf.push(">");
            for (var $index = 0, $$l = groups[2].length; $index < $$l; $index++) {
                var cat = groups[2][$index];
                buf.push("<a"), buf.push(attrs({
                    href: cat.nav_link
                })), buf.push(">" + escape((interp = cat.name) == null ? "" : interp) + "</a>")
            }
            buf.push("</p></p><p"), buf.push(attrs({
                "class": "row-2"
            })), buf.push("><p"), buf.push(attrs({
                "class": "group"
            })), buf.push(">");
            for (var $index = 0, $$l = groups[3].length; $index < $$l; $index++) {
                var cat = groups[3][$index];
                buf.push("<a"), buf.push(attrs({
                    href: cat.nav_link
                })), buf.push(">" + escape((interp = cat.name) == null ? "" : interp) + "</a>")
            }
            buf.push("</p><p"), buf.push(attrs({
                "class": "group"
            })), buf.push("><a"), buf.push(attrs({
                href: "/all/videos/"
            })), buf.push(">视频</a>");
            for (var $index = 0, $$l = groups[4].length; $index < $$l; $index++) {
                var cat = groups[4][$index];
                buf.push("<a"), buf.push(attrs({
                    href: cat.nav_link
                })), buf.push(">" + escape((interp = cat.name) == null ? "" : interp) + "</a>")
            }
            buf.push("</p>");
            if (req.promotions && req.promotions.dropdown_icontxt_promotions && req.promotions.dropdown_icontxt_promotions.length) {
                buf.push("<p"), buf.push(attrs({
                    "class": "group promotion"
                })), buf.push(">");
                for (var i = 0, $$l = req.promotions.dropdown_icontxt_promotions.length; i < $$l; i++) {
                    var promo = req.promotions.dropdown_icontxt_promotions[i];
                    i <= 6 && (buf.push("<a"), buf.push(attrs({
                        href: "" + promo.promotion_url + "",
                        target: promo.open_in_new_tab ? "_blank" : "_self",
                        "class": "brown-link"
                    })), buf.push(">" + escape((interp = promo.title) == null ? "" : interp) + "</a>"))
                }
                buf.push("</p>")
            }
            buf.push("</p></p></p><p"), buf.push(attrs({
                "class": "bottom-bar"
            })), buf.push("><a"), buf.push(attrs({
                onclick: "app.switchHeaderTo('side');return false;",
                href: "#",
                "class": "to-side btn-with-icon btn"
            })), buf.push("><i"), buf.push(attrs({
                "class": "pin-icon"
            })), buf.push("></i><span"), buf.push(attrs({
                "class": "text"
            })), buf.push("> 固定到左侧</span></a><p"), buf.push(attrs({
                "class": "links"
            })), buf.push("><a"), buf.push(attrs({
                href: "/about/#goodies"
            })), buf.push(">花瓣采集工具</a><a"), buf.push(attrs({
                href: "/about/"
            })), buf.push(">关于我们</a><a"), buf.push(attrs({
                href: "/fm/joinus/"
            })), buf.push(">加入我们</a><a"), buf.push(attrs({
                href: "/pins/53553/"
            })), buf.push(">用户反馈</a><a"), buf.push(attrs({
                href: "/about/#links"
            })), buf.push(">友情链接</a></p></p><p"), buf.push(attrs({
                "class": "up-arrow"
            })), buf.push('></p></p>

<script>((function(){if(location.hash){var a=$$("a[href="+location.hash+"]")[0];a&&(a.click(),docScroller.toElement(a))}})).delay(100)</script>')
        }
        return buf.join("")
    }, __t["base/people_likes_boards"] = function(locals) {
        var buf = [];
        with(locals || {}) {
            var interp, __val__ = emerge("base/header");
            buf.push(null == __val__ ? "" : __val__);
            var __val__ = emerge("base/people_layout", {
                req: req,
                user: page.user,
                ctx: "likes",
                body_tpl: "base/people_likes_boards_body",
                page: page
            });
            buf.push(null == __val__ ? "" : __val__)
        }
        return buf.join("")
    }


........



})(app);
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
黄舟

这个是模版已经被编译成 Javascript 了,只需要一个运行时就可以做页面渲染。至于模版是不是先写成 HTML,这个不一定,要看模版引擎支持解析什么格式。模版引擎太多了,绝大多数都是这样来实现的,想找一个来试试或者研究的话,可以戳这里:http://garann.github.io/template-chooser/

迷茫

确实是纯手写的,因为他们有一套自己的前端架构,或者称作框架,但是绝对不是jquery这种类型的东西。
推荐一篇文章,http://www.csdn.net/article/2013-04-19/2814961
你在这篇文章中挑一个框架(或者库)研究一下,就明白是怎么回事了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号