遍历集合中的数组

时间:2013-10-24 14:56:08

标签: javascript backbone.js underscore.js

所以,我对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不被支持的错误。

感谢您的帮助!

3 个答案:

答案 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',则:

  • 您的收藏集将包含名为pagecounttotalsortascending
  • 的字段
  • 这些字段将包含您在response.result
  • 字段中获得的值
  • 该集合的length将是length的{​​{1}},
  • 该集合的项目将是response.result.results的项目,因此您可以在response.result.results success处理程序中对其进行迭代。

如果fetch失败,或fetch不是response.status,则收集的长度将为零。字段'ok'pagecounttotalsort将为ascending,除非您在某处定义它们,例如undefined 1}}或上述initialize函数内的else分支。

Here是一个有效的例子。输出打印在控制台中,例如在Chrome中,按F12并切换到控制台选项卡。无论如何,由于Backbone集合有一个名为parse的方法,我会将sort字段的名称更改为其他字段(sortsorted等等 - 我不知道知道这个领域的语义。)

答案 2 :(得分:0)

当您在Backbone集合上调用myCollection.each时,您基本上调用了Underscore的each方法,但它作为Backbone.Collection方法呈现给您更好。

您可以在阵列上使用该方法:

_.each(this.myReports, function (report) {
  // do whatever with report
})

是否应该将其转换为骨干集合是另一个问题。如果您想在其中存储模型,或使用任何Backbone.Collection功能,请确保使用上述每种方法进行转换。