Backbone JS Как добавить новую модель в представление для автоматического повторного рендеринга шаблона

Я хотел бы прикрепить новую модель к представлению и повторно отобразить представление. Во-первых, я могу отобразить представление, но у меня возникают проблемы с изменением данных в этом представлении на новую модель.

my_model_1 = Backbone.Model.extend({});
my_model_2 = Backbone.Model.extend({});

my_view = Backbone.View.extend({
    initialize : function() {
        _.bindAll(this, 'render');
        this.model.bind('change', this.render);
    },

    render : function(){

    }
});

var view_instance = new my_view({ model: my_model_1 });

//Template gets rendered


try{
    view_instance.changeModel(my_model_2);
}catch(e){console.log(e)};
try{
    view_instance.set(my_model_2);
}catch(e){console.log(e)};
try{
    view_instance.fetch(my_model_2);
}catch(e){console.log(e)};
try{
    view_instance.model = my_model_2;
}catch(e){console.log(e)};  

//Template should get updated with data from model 2

Любой совет?


person stevenmc    schedule 15.08.2012    source источник


Ответы (1)


Событие change, если оно запускается, когда данные в вашей модели изменились, в вашем случае ваше представление не "повторно обновляется", потому что данные его модели не изменились, а вы просто переключили модели. Что вы можете сделать, так это вручную запустить событие изменения после переключения модели вашего представления или вызвать его render метод

Например

view_instance.model = my_model_2;
my_model_2.change();
person Jack    schedule 15.08.2012
comment
Теперь я решил проблему, и в значительной степени это было связано с вашим ответом, хотя, в конце концов, это оказалось скорее проблемой масштаба (а также связано с вашим предложением). В итоге я создал переменную window.model и установил для нее значение my_model_1, а затем запустил: var view_instance = new my_view({ model: window.model }); Позже я запустил: window.model.set(my_model_2), и это вызвало изменение, на которое вы ссылаетесь, которое обновило мое представление. Большое спасибо! Вы были совершенно правы! - person stevenmc; 16.08.2012