1

これが私のモデルビューとコレクションです:

window.Report = Backbone.Model.extend({});
window.ReportCollection = Backbone.Collection.extend({
   model: Report,     

   initialize: function(properties){
       this.url = properties.url;
   }
});

window.ReportCollectionView = Backbone.View.extend({
     initialize: function(){                   
        this.collection.reset();
        this.render();            
    },

    render: function(){
        var self = this;

        this.collection.fetch({

            success: function(){
                    self.collection.each(function(model){
                    //pass model to subview  
                    });
                }
            }
        });    

    }
});

コードの他の部分では、上記のオブジェクトのインスタンス化を使用します

   var reportCollection = new ReportCollection({url:someURL});
   var reportCollectionView = new ReportCollectionView({collection:reportCollection});

「someURL」は、オブジェクトの JSON リストを返す REST ベースの URL です。

これまでのところ、すべてが良さそうです。私が達成しようとしているのは、URLを変更して「reportCollection」を更新できる必要があり、これにより更新された「reportCollectionView」がトリガーされるはずです。ご指摘ありがとうございます

4

1 に答える 1

2

urlを変更して強制するメソッドをコレクションに追加できると思いますfetch

window.ReportCollection = Backbone.Collection.extend({
    //...
    changeUrl: function(url) {
        this.url = url;
        this.fetch();
    }
});

次に、ビュー内のイベントにバインドし"reset"ます。

window.ReportCollectionView = Backbone.View.extend({
    initialize: function() {
        _.bindAll(this, 'render');
        this.collection.on('reset', this.render);
        this.collection.reset();
    },
    //...
});

次に、これを行うと:

c = new ReportCollection(...);
v = new ReportCollectionView({ collection: c, ... });

レンダリングされたビューを取得すると、後で次のことができます。

c.changeUrl(...);

をクリックして新しい URL を設定すると、 でrender呼び出しがトリガーされvます。

于 2012-06-26T20:00:57.667 に答える