Событие изменения не получает триггер при обновлении модели в магистрали js
У меня есть представление под названием layerPanel, которое использует модель screenData. Теперь на model.set я получаю событие обновления от самой модели, но оно не работает в представлении.
МОДЕЛЬ
var screenData = Backbone.Model.extend({
initialize : function() {
_.bindAll(this,"update");
this.bind('change:vdata', this.update);
},
update: function() {
var obj = this.vdata;
alert("update");
},
vdata:[{id : 0, title : "Welcome to Persieve 0"}]
});
ПОСМОТРЕТЬ
var layerPanel = Backbone.View.extend({
el: "#allLayers",
model: new screenData(),
initialize: function() {
this.render();
this.model.bind('change:vdata', this.render);
},
render: function() {
this.template = _.template(LayersTpl, {splitData: this.model.vdata});
this.$el.html(this.template);
return this;
}
});
Вот как я устанавливаю значения в модели.
screendata = new screenData;
var obj = screendata.vdata;
obj[obj.length] = {id : $(".bullet").length, title : "Welcome to Persieve"};
var tempData = [];
for ( var index=0; index<obj.length; index++ ) {
if ( obj[index]) {
tempData.push( obj );
}
}
obj = tempData;
screendata.set({vdata:[obj]});
1 ответ
Событие должно выстрелить. Но ваш рендер не будет работать, так как контекст "this" требует настройки.
пытаться:
this.model.bind('change:vdata', this.render, this);
или, что еще лучше, используйте listenTo, и контекст неявный (+ вы можете легко очистить this.remove())
Редактировать. Из изменений, которые вы сделали выше, я вижу, что вы создаете новый экземпляр screendata. Связывание, которое вы создали, предназначено для другого экземпляра. model: new screenData()
,
Вы должны ссылаться на связанный объект и установить его, если хотите, чтобы событие инициировалось.
Если все настройки модели происходят в реальной модели. Вызов this.set({vdata:[obj]});