在Addy Osmani's Developing Backbone.js Applications中,他在nextOrder()
集合中使用TodoList
函数来查找该集合中排序最高的项并将其返回,如下所示:
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
中的一项是模型defaults
。为什么?此时收集应该是空白的,对吧?如果是这样,为什么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()
工作得很好,但是这个系列似乎与模型没有关系,因为我将这个错误解释为“你想要什么型号的模型”我要创造?我不知道任何问题。'
感谢您回答我期望的一个非常愚蠢的问题:|