鉴于此集合 -
{"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);
这样可以完成工作,但它似乎效率不高,或者确实不是正确的做事方式。
我尝试在 this 上循环而不是过滤,但我收到一个错误,提示 k 未定义。我想我的问题分为两部分 - 为什么返回 k is undefined 以及我在获取教育集合的子集时遗漏了什么?我觉得嵌套循环是不需要发生的多余工作。可能是我误解了 Backbone 处理集合的方式,或者这真的是实现我目标的最佳方式吗?
最佳答案
我认为 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;
});
关于javascript - 如何获取 Backbone.Collection 的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16591907/