0

ご覧のとおり、私はバックボーンに非常に慣れていないため、なぜこれが機能しないのかわかりませんか???

このエラーが発生していますか?

キャッチされていない TypeError: undefined のメソッド 'on' を呼び出せません

コード

TodoItem = Backbone.Model.extend({});

TodoList = Backbone.Collection.extend({
    model: TodoItem,
    url: "todo"
});

var TodoView = Backbone.View.extend({
    el: '#content',
    initialize: function() {
        this.model.bind('change', this.render, this);
    },
    render: function(model) {
        this.$el.html('test');
    }
});

$(function() {

    var todoList = new TodoList();

    todoList.fetch();

    new TodoView();

});

URL TODO - JSON

[ {description: '牛乳を受け取ります', status: '未完了', id: 1},
{description: '洗車してください', status: '未完了', id: 2} ]

4

1 に答える 1

1

ビューで使用this.modelしています:

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

ただし、ビューを作成するときにモデルを指定しません:

new TodoView();

それは次のようになります。

new TodoView({ model: some_model })

TodoViewコレクション全体を表示する場合は、次を使用しthis.collectionます。

initialize: function() {
    this.collection.on('change', this.render, this);
}

ビューを作成するときにcollectionオプションを指定します。

new TodoView({ collection: todoList });

また、todoList.fetch();これは AJAX 呼び出しであるため、ビューを作成するときにおそらく何もないことに注意してください。イベントにtodoListバインドして、'reset'何かが表示されたときに再レンダリングできます。

initialize: function() {
    _.bindAll(this, 'render');
    this.collection.on('change', this.render);
    this.collection.on('reset',  this.render);
}

_.bindAllを使用して関数を にバインドすることもできます。thisこれにより、3 番目のパラメーターを に使用する必要がなくなりますon

ところで、bindは のエイリアスでonあり、bind引き続き機能しますがon、新しいコードの推奨される方法です。on私の知る限り、名前は、新しい jQuery 命名スキームによりよく一致するように変更されました。

于 2012-06-10T05:35:49.990 に答える