Javascript 主干:从集合访问模型
在中,他在他的Javascript 主干:从集合访问模型,javascript,backbone.js,Javascript,Backbone.js,在中,他在他的TodoList集合中使用nextOrder()函数来查找该集合中顺序最高的项并将其返回,如下所示: nextOrder: function() { if ( !this.length ) { return 1; } return this.last().get('order') + 1; }, 做同样的事情对我不起作用。我正在尝试制作一个游戏列表,因此我有一个Game模型和一个games集合: var Games = Backbone.
TodoList
集合中使用nextOrder()
函数来查找该集合中顺序最高的项并将其返回,如下所示:
nextOrder: function() {
if ( !this.length ) {
return 1;
}
return this.last().get('order') + 1;
},
做同样的事情对我不起作用。我正在尝试制作一个游戏列表,因此我有一个Game
模型和一个games
集合:
var Games = Backbone.Collection.extend({
localStorage: new Backbone.LocalStorage('gameslist-backbone'),
nextOrder: function () {
if (!this.length) {
return 1;
}
return this.last().get('id') + 1;
}
});
var Game = Backbone.Model.extend({
defaults: {
'id': 0,
'name': 'Untitled'
}
});
然后我初始化这两个
var app = {};
$(function () {
app.game = new Game();
app.games = new Games({ model: app.game });
});
…并在控制台中玩一玩,看看我能发现什么:
app.games.length //=> 1
app.games.nextOrder() //=> NaN
此时,app.games
中的一项是模型的默认值
。为什么?此时集合应该是空白的,对吗?假设是这样,为什么nextOrder()
返回NaN
而不是2
如果我将集合初始化为app.games=new games(),我可以使它的工作方式稍有不同
并将model:app.game
设置为集合中的属性。nextOrder()可以工作,但是:
app.games.create({ 'Name': 'Monopoly' });
TypeError: 'undefined' is not a constructor (evaluating 'new this.model(attrs, options)')
此时,nextOrder()
工作得非常好,但集合似乎没有与模型交互,因为我将该错误解释为“您希望我创建什么模型?”?我什么都不知道。”
感谢您回答了我认为非常愚蠢的问题:|集合的
model
属性应该是一个模型类,而不是实例,它通常是集合定义的一部分。如果你设置得当,效果很好:非常有用。不知道我怎么会错过。如果你设置得当,它确实工作得很好。感谢您为我指路。model
作为实例属性在视图中很常见,因此您会看到很多类似var v=new SomeView({model:app.game})
的内容。