因此,每当我想从我的收藏中选择一个模型时,我总是使用骨干自己的where
方法。
var homeTeam = this.collection.where({teamName: this.currentTeamName('home')});
我有自己的方法来抓住当前的团队,我将“家”或“离开”作为参数传递,并且它知道要抓住哪个模型,这一切都很好,花花公子,另一个例子就是通过一个字符串如下。
// This is practically the same as the above.
var homeTeam = this.collection.where({teamName: 'bulls'});
因此,如果我记录该变量console.log(homeTeam)
,则控制台会显示该模型,就像它对任何模型一样。
控制台显示我可以访问模型可以使用http://backbonejs.org/#Model的常规方法但是如果我调用其中一种方法我会收到错误,ex homeTeam.save({someAttr: 'juicy'});
所以我只使用下面的下划线each
方法,它可以工作。
_.each(homeTeam, function(model) { model.save({someAttr: 'juicy'}); }, this);
我已经这样做了一段时间,但我很想知道为什么我必须这样做,当记录homeTeam
它通过模型就像
_.each(homeTeam, function(model) { console.log(model) }, this);
它们在控制台中显示完全相同。
答案 0 :(得分:1)
因为where
会返回数组模型。该数组不是模型对象。这是一个数组。
请参阅source。
答案 1 :(得分:1)
啊,我想我在这里看到了问题。
.where返回一个数组;即使它是一个Model数组,Javascript控制台也会将该条目作为模型进行评估,以便您可以看到Backbone提供的方法。
您需要做的是使用.findWhere。
这将返回第一个匹配的模型,作为正确输入的对象。
或者你可以尝试(只是为了证明)'homeTeam [0] .save(...)
澄清一下:你收到错误是因为homeTeam不是你想象的那样;欢迎来到Javascript!
答案 2 :(得分:1)
假设team.teamName
是唯一的,您可以安全地使用.findWhere
,它会从您的集合中返回单个模型,而不是返回模型数组的.find
。
<强>
findWhere
强> 查看列表并返回与属性中列出的所有键值对匹配的第一个值。
而不是
<强>
where
强> 查看列表中的每个值,返回包含属性中列出的所有键值对的所有值的数组。