backbone.js 如何确定同步时更改了哪些属性

wtzytmuj  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(150)

正如标题所说,有没有什么方法可以让我确定模型上的哪些属性在同步时发生了变化?
对我来说,理想的情况是一种类似于change侦听器的机制,所以我会有这样的结果:

var MyModel = Backbone.Model.extend({

    initialize: function(){
        this.on({
            'sync:Name' : 'onSyncName'
        })

        onSyncName: function(){
            alert('Name saved!');
        }
    }
})

从我所知道的情况来看,这种机制并不存在于作为一个整体的单个属性中,sync将只引用整个模型本身。

qoefvg9y

qoefvg9y1#

您可以使用模型中的changedAttribute函数,该函数返回自上次设置以来更改的属性的哈希值。

var MyModel = Backbone.Model.extend({

   initialize: function(){
      this.on({
        'sync' : 'onSync'
      });        
   },
   onSync: function(model){
        _.each( model.changedAttributes(), function(value, key, list) { console.log("key" + key + " value " + value);
   }

})

仅针对属性的同步事件不存在,并且没有意义,因为它是正在同步的整个模型

q7solyqu

q7solyqu2#

您可以在模型中添加一个validate方法,并使用它将更改的属性保存在变量中:

var lastChanged = {};
            var MyModel = Backbone.Model.extend({

                initialize: function(){
                    this.on({
                        'sync' : 'onSync'
                    });
                },

                onSync: function(){
                    if(lastChanged.hasOwnProperty("Name")){
                        alert("Name changed!");
                    }
                },

                validate : function(attrs, options){
                    lastChanged = options.changed;
                }

            });

相关问题