0

私はbackbone.jsアプリを書いていますが、問題があります。私のコレクションはイベントを発生させません、誰かが以下のコードで問題を見つけることができますか?レンダーフィードバック、イニシャライザフィードバックを受け取りますが、appendメソッドが呼び出されることはありません。「../app」がtrojsonアイテムのリストを返すことを知っています。そして、これらがコレクションで作成されていることさえわかります。イベントが呼び出されないのはなぜですか?

window.TablesInspectorView = Backbone.View.extend({

    tagName: "div",

    initialize: function () {
        console.log('Initializing window.TablesInspectorView');        

        // setup the tables
        this.data     = new Backbone.Collection();
        this.data.url = "../app";
        this.data.fetch();

        // some event binds..
        this.data.on("change", this.render     , this);
        this.data.on("add"   , this.append_item, this);
    },
    render: function(){
        console.log("render");
        _.each(this.data.models, this.append_item);
    },
    append_item: function(item) {
        console.log("appended");
    }
});
4

1 に答える 1

2

私の知識によると、バックボーンfetch()は非同期イベントであり、完了するとリセット イベントがトリガーされます。

コレクション(this.data)に属するモデルが変更されると、変更イベントがトリガーされるため、その部分が正しくないと推測されます。

だから私はこのようなことをするでしょう:

window.TablesInspectorView = Backbone.View.extend({

    tagName: "div",

    initialize: function () {
        console.log('Initializing window.TablesInspectorView');        

        // setup the tables
        this.data     = new Backbone.Collection();
        this.data.url = "../app";
        this.data.fetch();

        // some event binds..
        this.data.on("reset", this.render     , this); //change here
        this.data.on("add"   , this.append_item, this); // i dont see a this.data.add() in you code so assuming this was never called ?
    },
    render: function(){
        console.log("render");
        _.each(this.data.models, this.append_item);
    },
    append_item: function(item) {
        console.log("appended");
    }
});
于 2013-02-07T19:09:38.527 に答える