我目前正在使用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")
});
答案 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 %>
祝你有个美好的一天。