Marionette ItemView как повторно визуализировать модель при изменении
Я использую движок шаблонов рулей.
Итак, у меня есть модель:
Backbone.Model.extend({
urlRoot: Config.urls.getClient,
defaults: {
contract:"",
contractDate:"",
companyTitle:"",
contacts:[],
tariff: new Tariff(),
tariffs: [],
remain:0,
licenses:0,
edo:""
},
initialize:function(){
this.fetch();
}
});
Затем Marionette ItemView:
Marionette.ItemView.extend({
template : templates.client,
initialize: function () {
this.model.on('change', this.render, this);
},
onRender: function () {
console.log(this.model.toJSON());
}
});
И тогда я называю все как:
new View({
model : new Model({id:id})
})
И, это немедленно сделать вид для меня, и это круто. Но после того, как модель получила данные, это триггер "изменение", поэтому я вижу в консоли сериализованную модель дважды, и я вижу в первый раз пустую модель, а затем заполненную.
Но представление не обновляется.
Как я могу это исправить?
P.S. Я поймите, что я могу вызвать метод render на fetch done callback. Но он также нужен мне для дальнейших действий, когда пользователь будет менять модель.
2 ответа:
В представлении можно использовать следующий код
modelEvents: { 'change': 'render' }
Вместо
initialize: function () { this.model.on('change', this.render, this); }, onRender: function () { console.log(this.model.toJSON()); }
На самом деле, костяк и марионетка достаточно умны, чтобы сделать это.
Проблема была в шаблоне и данных, как я нашел его Другой вопрос . Итак, я все перепроверил и получил результат.