所以,我对Backbone还是一个新手。我的问题是:我有一个这样的集合:
...
isCollection: true,
parse: function(response) {
if (response.status == 'ok') {
this.page = response.result.page;
this.count = response.result.count;
this.total = response.result.total;
this.sort = response.result.sort;
this.ascending = response.result.ascending;
this.myReports = response.result.results;
return this;
} else {
}
this.myReports是一个对象数组。我的问题是如何迭代数组(myReports)?我必须将其转换为集合吗?如果我尝试使用.each,我会收到一个关于.each不被支持的错误。
感谢您的帮助!
答案 0 :(得分:0)
您是否尝试像简单的js数组一样迭代它?
类似的东西:
for(var i in myArray){
var item = myArray[i];
//dosomething
}
也许值得为高级数组功能尝试下划线。
答案 1 :(得分:0)
我会以这种方式将response.result.results
的元素放入集合中:
parse: function(response) {
if (response.status == 'ok') {
this.page = response.result.page;
this.count = response.result.count;
this.total = response.result.total;
this.sort = response.result.sort;
this.ascending = response.result.ascending;
return response.result.results;
} else {
}
}
现在,如果fetch
集合成功,response.status
为'ok'
,则:
page
,count
,total
,sort
和ascending
,response.result
,length
将是length
的{{1}},response.result.results
的项目,因此您可以在response.result.results
的success
处理程序中对其进行迭代。如果fetch
失败,或fetch
不是response.status
,则收集的长度将为零。字段'ok'
,page
,count
,total
和sort
将为ascending
,除非您在某处定义它们,例如undefined
1}}或上述initialize
函数内的else
分支。
Here是一个有效的例子。输出打印在控制台中,例如在Chrome中,按F12并切换到控制台选项卡。无论如何,由于Backbone集合有一个名为parse
的方法,我会将sort
字段的名称更改为其他字段(sort
,sorted
等等 - 我不知道知道这个领域的语义。)
答案 2 :(得分:0)
当您在Backbone集合上调用myCollection.each
时,您基本上调用了Underscore的each方法,但它作为Backbone.Collection
方法呈现给您更好。
您可以在阵列上使用该方法:
_.each(this.myReports, function (report) {
// do whatever with report
})
是否应该将其转换为骨干集合是另一个问题。如果您想在其中存储模型,或使用任何Backbone.Collection
功能,请确保使用上述每种方法进行转换。