为了使它起作用,您需要做一些事情。
用一个可以理解您传递给它的数据的自定义集合替换 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);
干净了很多。