Backbone:从Collection访问Model

时间:2014-06-09 03:14:00

标签: javascript backbone.js

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()工作得很好,但是这个系列似乎与模型没有关系,因为我将这个错误解释为“你想要什么型号的模型”我要创造?我不知道任何问题。'

感谢您回答我期望的一个非常愚蠢的问题:|

0 个答案:

没有答案