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 に答える