我使用骨架和把手进行模板化,我对此有了新的认识。 我当前的json采用以下格式,代码工作正常。
[
{
"id": "10",
"info": {
"name": "data10"
}
},
{
"id": "11",
"info": {
"name": "data11"
}
}
]
但是,当我将我的json结构更改为如下所示的内容时,我很难将内容填充。
{
"total_count": "10",
"dataElements": [
{
"id": "10",
"info": {
"name": "data10"
}
},
{
"id": "11",
"info": {
"name": "data11"
}
}
]
}
如何填充保存当前代码结构的name,info和total_count?
JSFiddle:http://jsfiddle.net/KTj2K/1/
任何真正有用的帮助。
答案 0 :(得分:2)
为了实现这一点,您需要做一些事情。
使用可以了解您传递给它的数据的自定义内容替换Backbone的核心'重置'。例如:
reset: function (data) {
this.totalCount = data.total_count;
Backbone.Collection.prototype.reset.call(this, data.dataElements);
}
现在,当您重置集合时,它会将total_count拉出您正在重置它的对象,并使用Backbone的核心重置与dataElement数组。请记住,如果您打算从服务器中提取此信息,则可能需要使用“解析”执行类似操作。
我建议(如果您的示例看起来与您正在使用的实际代码类似),请在重新渲染之前重置您的集合。
var dataCollectionList = new dataCollection();
dataCollectionList.reset(jsonData);
var App = new AppView({model : dataCollectionList});
现在在您的视图的“渲染”方法中,您可以从集合中获取'totalCount'属性 -
render : function() {
//Should spit the total count into the element, just as an example
this.$el.append(this.model.totalCount);
//or console.log it
console.log(this.model.totalCount);
return this;
}
瞧。旁注 - 作为与Backbone一起工作的人,当人们设置类似“模型”(即peopleModel,itemModel等)的属性时,它会让我疯狂,并最终成为骨干集合。在它之后命名它更清楚 - 虽然一些MVC纯粹主义者可能会有点不同意。
此外,在此代码块中:
_.each(this.model.models, function (myData) {
$(this.el).append(new ItemView({model:myData}).render().el);
}, this);
您无需执行_.each(this.model.models.......)
。由于您正在使用集合,因此该集合具有内置的“每个”方法。
this.model.each(function (myData) { ..... } , this);
相当干净。