0

私は物事に本当に怒っています:

var BoardNumber = Backbone.Model.extend({
    defaults: function(){
        return {
            value: 0,
            selected: false
        };
    },

    toggle: function() {
        this.save({selected: !this.get("selected")});
    }
});

var BoardNumberView = Backbone.View.extend({
tagName: "li",
template: _.template('<div class="boardNumber"><p>{{value}}</p></div>'),

events: {
    "click .boardNumber": "toggleDone",
    "click .selected": "toggleDone"
},

initialize: function () {
    this.listenTo(this.model, 'change', this.render);
},

render: function () {
    this.$el.html(this.template(this.model.toJSON()));
    return this;
},

toggleDone: function (evt) {
    this.model.toggle();
}
});

var NumbersOnBoard = Backbone.Collection.extend({
model: BoardNumber,
toGenerate: 80,
url: "/numbers",
initialize: function(){
    var i = this.toGenerate;
    while(i--){
        this.create({ value: this.toGenerate-i });
    }
},
selected: function(){
    return this.where({selected: true});
}
});

他に何も必要ないはずです..クリックすると、タイトルにこのエラーが表示されます。それが何であるかわかりません

編集: コレクションと完全なビューを追加しました。注: クリックするとイベント this.render が完全に起動され、そのときだけエラーが起動され、そのモデルのイベント リスナーが消えるようになります。

編集 #2: スタック トレースの場合、Backbone の開発バージョンでは次のように表示されます。

triggerEvents              backbone.js:205
Backbone.Events.trigger    backbone.js:146
_.extend._onModelEvent     backbone.js:933
triggerEvents              backbone.js:206
Backbone.Events.trigger    backbone.js:147  
_.extend.set               backbone.js:370
4

3 に答える 3

0

アイテムのリストをレンダリングするには、Backbone Marionetteを使用することをお勧めします。これにより、例で記述されたすべてのボイラープレート コードが作成されます。

その場合BoardNumberViewは になりItemView、コレクション レンダリング ビューはCollectionViewまたは になりCompositeViewます。

そのドキュメントは非常に単純ですが、さらに調査したい場合は、 David Sulc の投稿をお勧めします。

于 2013-08-06T09:49:21.453 に答える