在更新主干js中的模型时,更改事件不会触发

时间:2013-03-27 11:39:37

标签: backbone.js backbone-events

我有一个名为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 个答案:

答案 0 :(得分:4)

该事件应该开火。但是你的渲染不会起作用,因为'this'上下文需要设置。

尝试:

this.model.bind('change:vdata', this.render, this);

甚至更好,使用listenTo并隐式上下文(+你可以轻松清理this.remove())

编辑。从上面的编辑中,我可以看到您正在创建一个新的screendata实例。您创建的绑定适用于其他实例model: new screenData()

如果希望触发事件,则必须引用绑定对象并进行设置。

如果所有模型设置都在实际模型中进行。致电this.set({vdata:[obj]});