Backbone:如何通过集合访问model't属性?

时间:2014-05-30 05:45:34

标签: jquery backbone.js

我目前正在使用backbone.js创建Todo应用。有一个输入框可以在其中键入任务。输入数据存储在每个模型中(每次插入数据时都会创建模型)。模型集存储在集合中。现在,我面临这样的挑战,我无法通过集合访问每个模型的属性来显示我所做的所有任务。 有没有办法解决这个问题?

 //html 
 <ul data-role="listview" data-split-icon="delete" data-split-theme="c">
 <% _.each(datas, function(data){ %>
   <li id="list">
    <a> things that need to be done : <%=data.get("things")%> </a> 
            <a id="del_btn"></a>
   </li>
 <% }); %>
 </ul>

 //View
 this.data = {
        datas: this.collection
 };

 //Collection
 helloWorldCollection.add({
     things: helloWorldModel.get("things")
 });

2 个答案:

答案 0 :(得分:0)

您应该在模板中使用Collection#each来遍历集合模型。用这个替换你当前的循环线:

<% datas.each(function(data){ %>

Backbone集合不是_.each()操作的传统数组,而是具有大量Underscore方法的对象,用于迭代内部模型列表。

答案 1 :(得分:0)

我没有看到完整的代码,所以也许我并不完全明白你想要的是什么。我建议你改变代码的某些部分。

<% _.each(datas, function(data){ %>
    <li id="list">
        // Here you don't need to use get method.
        // Just specify the desired property.
        <a> things that need to be done : <%= data.things %> </a>
        <a id="del_btn"></a>
    </li>
<% }); %>

此外,您还可以获取集合模型的所有属性:

this.data = {
    datas: this.collection.toJSON()
};

但我认为这部分代码在完整版中看起来像那样:

_.template({
    datas: this.collection.toJSON()
})

重点是将应用程序和View的逻辑分开。模板应该只显示您的数据。

UPD: 最后。如果你想在temaplate中执行一些代码,你应该使用

<% code execution %>

而不是

<%= variable interpolation %>

祝你有个美好的一天。