Событие изменения не получает триггер при обновлении модели в магистрали 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]});

Другие вопросы по тегам