1

鉴于此系列 -

{"education":
[
    {
        "school":{
            "name":"Maxwell",
            "type":"Secondary",
            "teachers": [
                {"name":"Mrs. Smith","subject":"Chemistry"},
                {"name":"Mr. Jones","subject":"Calculus"}
            ]
        }
    },{
        "school":{
            "name":"Bright",
            "type":"Elementry",
            "teachers": [
                {"name":"Mr. Anthony","subject":"Reading"},
                {"name":"Mrs. Bates","subject":"Social Studies"}
            ]
        }
    }
]

}

我正在尝试归还所有学校物品,以便可以在模板中显示名称。

鉴于此代码 -

schools = [];
filtered = this.filter(function (item) {
        return (
                item.get('school') !== ''
        )
});       
_.each(filtered, function(k,v) {
    _.each(k.attributes.models, function (k2, v2) {                 
        schools.push(k2.get('school'));
    });
});
colSchools = new Backbone.Collection(schools);    

这可以完成工作,但它似乎不是很有效,或者说不是真正的正确做事方式。

我尝试循环不是过滤,我得到一个错误k is undefined。我想我的问题是两部分 - 为什么返回k 是未定义的,我在获取教育集合的子集时缺少什么?我觉得嵌套循环是多余的工作,不需要发生。可能是我误解了 Backbone 处理集合的方式,或者这真的是实现我的目标的最佳方式吗?

4

1 回答 1

3

我认为http://backbonejs.org/#Collection-pluck是您正在寻找的:

var stooges = new Backbone.Collection([
  {name: "Curly", age: 60},
  {name: "Larry", age: 70},
  {name: "Moe", age: 80}
]);

var names = stooges.pluck("name");

alert(JSON.stringify(names));

如果你尝试它,这应该会提醒["Curly","Larry","Moe"]

编辑:抱歉,我没有发现嵌套级别,但是由于 pluck 它只是 map 的应用程序,您可以执行以下操作:

stooges.map(function(model){
  return model.get('school').name;
});
于 2013-05-16T15:50:01.193 回答