鉴于这个集合 -
{"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未定义的错误。我想我的问题是两个部分 - 为什么返回 k是未定义的以及我在抓取教育集合的子集时缺少什么?我觉得嵌套循环是多余的工作,不需要开心。可能是我误解了Backbone如何处理集合,或者这真的是实现我的目标的最佳方式吗?
答案 0 :(得分:2)
我认为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"]
stooges.map(function(model){
return model.get('school').name;
});