1

我有一个使用 screenData 模型的名为 layerPanel 的视图。现在在 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]});
4

1 回答 1

4

该事件应该触发。但是您的渲染将无法工作,因为“this”上下文需要设置。

尝试:

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

或者更好的是,使用listenTo 并且上下文是隐式的(+ 你可以很容易地清理this.remove())

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

如果要触发事件,则必须引用绑定对象并设置它。

如果所有模型设置都发生在实际模型中。称呼this.set({vdata:[obj]});

于 2013-03-27T12:43:22.950 回答