【问题标题】:Mustache.js is adding text instead of htmlMustache.js 正在添加文本而不是 html
【发布时间】:2017-02-16 10:22:41
【问题描述】:

这是我第一次使用mustache.js,需要帮助。

做一个 html 模板构建器,我试图从 JSON 和 HTML 文件中获取数据,而不是将它们显示到我的页面中。

所以我使用这个脚本从 JSON 获取默认主题而不是获取 HTML:

$.getJSON('templates.json', function(json){
    $.each(json, function(theme, val){
        if(theme == 'Default'){
            template.load('templates/'+val.url+'/template.html', function(response, status, xhr){
                $(this).html(Mustache.render($(this).html(), {
                    tabs:val.tabs
                }));
            });
        }
    });
});

JSON:

{ 
    "Default" : {
        "url":"default",
        "logo": "YOUR LOGO HERE",
        "phone": "+1234567890",
        "tabs": [
            "About Us",
            "Delivery", 
            "Payment", 
            "Shipping", 
            "Contact Us"
        ]
    }
}

HTML:

    {{#tabs.length}}
    <div id="tabs">
        {{#tabs}}
        <input class="state" type="radio" title="tab1" name="tabs-state" id="tab1" checked />
        {{/tabs}}
        <div class="tabs flex-tabs">
            {{#tabs}}
            <label for="tab1" id="tab1-label" class="tab">{{.}}</label>
            {{/tabs}}
            {{#tabs}}
            <div id="tab1-panel" class="panel active">[[{{.}}]]</div>
            {{#tabs}}
        </div>
    </div>
    {{/tabs.length}}

我只是无法显示标签。我第一次尝试使用 javascript 将 json 转换为 html,但 Mustache 显示的是文本而不是 html。现在我正在尝试使用 html 中的条件,但没有运气。

我还需要为每个项目添加数字,例如:“tab1”、“tab2”.. - 这是 {{@index}} 适合吗?

我怎样才能只为第一个项目添加checked

也不确定{{.}}这是否显示了我的标签的名称..

【问题讨论】:

    标签: javascript jquery json mustache


    【解决方案1】:

    您几乎已经搞定了,尽管对如何编写 mustacheJS 视图略有误解。它比你想象的还要简单!见下文。我已经简化了这个例子,所以你理解这个概念。

    下面的一些解释:

    {{#Default}}{/Default}} 表示循环对象字面量

    {{#tabs}}{{/tabs}} 表示对存在于{{#Defaults}} 中的对象进行循环。

    {{.}} 显示对象的全部内容。如果这是一个复杂的对象,它将被渲染为[object][object]。如果您遇到这种情况,您必须在视图中明确命名该对象。

    <div class="tabs">
    {{#Default}}
       {{#tabs}}
             <input class="state" type="radio" title="Tab1" name="tabs-state" checked/>
             <div class=tabs flex-tabs>
                {{.}}
             </div>
       {{/tabs}}
    {{/Default}}
    </div>
    

    查看制作

    <div class="tabs">
       <div class=tabs flex-tabs>
          About Us
       </div>
       <div class=tabs flex-tabs>
          Delivery
       </div>
       <div class=tabs flex-tabs>
          Payment
       </div>
       <div class=tabs flex-tabs>
          Shipping
       </div>
       <div class=tabs flex-tabs>
          Contact Us
       </div>
    </div>
    

    【讨论】:

    • 关于如何将 1、2、3、4(索引)添加到每个 div 的任何想法?无需手动将它们添加到 json 中
    • 我通常给我的对象添加一个索引。见here。我相信把手可以让你从视图中访问索引,但我从来没有这样做过。
    • 是的,但我不能在JSON 中使用它:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 2011-09-18
    • 2011-09-12
    • 1970-01-01
    • 2018-10-29
    • 2022-01-25
    相关资源
    最近更新 更多