Восстанавливающая коллекция Backbone.js не обновляет соответствующее представление

Вот мой вид модели и коллекция:

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' - это URL-адрес на основе REST, который возвращает список объектов JSON.

Пока все выглядит хорошо. Чего я пытаюсь добиться, так это: я должен иметь возможность обновить «reportCollection», изменив URL-адрес, и это должно вызвать обновленный «reportCollectionView». Спасибо за любые указатели


person Vikram    schedule 26.06.2012    source источник


Ответы (1)


Я полагаю, вы могли бы добавить в свою коллекцию метод, который изменяет 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.

person mu is too short    schedule 26.06.2012
comment
спасибо, что нашли время ответить на этот вопрос... Я включу ваше предложение в свой код и соответствующим образом обновлю этот вопрос. - person Vikram; 27.06.2012