问题使用Mustache模板渲染骨干集合

时间:2011-09-27 14:27:32

标签: javascript jquery templates backbone.js mustache

我是骨干js和胡子的新手。我试图从rails json对象加载页面加载的主干集合(对象数组)以保存额外的调用。我正在使用胡子模板渲染骨干集合时遇到麻烦。

我的模特&收集是

var Item =  Backbone.Model.extend({

});

App.Collections.Items= Backbone.Collection.extend({
    model: Item,
    url: '/items'
});

并查看

App.Views.Index = Backbone.View.extend({
    el : '#itemList',
    initialize: function() {
        this.render();
    },

    render: function() {
        $(this.el).html(Mustache.to_html(JST.item_template(),this.collection ));
        //var test = {name:"test",price:100};
        //$(this.el).html(Mustache.to_html(JST.item_template(),test ));
    }
});

在上面的视图渲染中,我可以渲染单个模型(注释的测试对象),但不能渲染集合。我完全被击中了,我尝试了下划线模板和放大器小胡子,但没有运气。

这是模板

<li>
<div>
  <div style="float: left; width: 70px">
    <a href="#">
      <img class="thumbnail" src="http://placehold.it/60x60" alt="">
    </a>
  </div>
  <div style="float: right; width: 292px">
    <h4> {{name}} <span class="price">Rs {{price}}</span></h4>
  </div>
  </div>
</li>

我的对象数组看起来像这样

enter image description here

4 个答案:

答案 0 :(得分:7)

最后,事实证明胡子不会处理发送到模板的对象数组,所以我不得不用其他对象包装它

render: function() {
    var item_wrapper = {
          items : this.collection
    }

    $(this.el).html(Mustache.to_html(JST.item_template(),item_wrapper ));

}

并在模板中循环使用items数组来呈现html

{{#items}}
<li>
<div>
  <div style="float: left; width: 70px">
    <a href="#">
      <img class="thumbnail" src="http://placehold.it/60x60" alt="">
    </a>
  </div>
  <div style="float: right; width: 292px">
    <h4> {{name}} <span class="price">Rs {{price}}</span></h4>
  </div>
  </div>
</li>
{{/items}}

希望对某人有所帮助。

答案 1 :(得分:7)

Mustache可以使用{{#.}}{{.}}{{/.}}

处理数组

答案 2 :(得分:4)

这是因为胡子需要一个键/值对 - 对于非空列表而言值为数组。从mustache man page,“非空列表”部分:

Template:

{{#repo}}
  <b>{{name}}</b>
{{/repo}}

Hash:

{
  "repo": [
    { "name": "resque" },
    { "name": "hub" },
    { "name": "rip" },
  ]
}

Output:

<b>resque</b>
<b>hub</b>
<b>rip</b>

如果你只传递一个数组,那么胡子就无法知道在模板中扩展它的位置。

答案 3 :(得分:1)

使用Hogan.js实施。

给定模板:

<ul>
{{#produce}}
    <li>{{.}}</li>
{{/produce}}
</ul>

和背景:

var context = { produce: [ 'Apple', 'Banana', 'Orange' ] );

我们得到:

<ul>
    <li>Apple</li>
    <li>Banana</li>
    <li>Orange</li>
</ul>