Javascript 确定模型';的当前属性是否与默认属性不同?

Javascript 确定模型';的当前属性是否与默认属性不同?,javascript,backbone.js,Javascript,Backbone.js,我有一个具有以下默认值的模型: Entities.OrdersFilter = Backbone.Model.extend({ defaults: { 'start-date': '2014-09-01', 'end-date': '2014-10-01', 'status': 'OUTSTANDING' }, localStorage: new Backbone.LocalStorage('OrderFilters') }

我有一个具有以下默认值的模型:

Entities.OrdersFilter = Backbone.Model.extend({
    defaults: {
        'start-date': '2014-09-01',
        'end-date': '2014-10-01',
        'status': 'OUTSTANDING'
    },
    localStorage: new Backbone.LocalStorage('OrderFilters')
});
这三个属性表示用户可以更改的过滤器。我需要显示一个“清除过滤器”按钮,但仅当过滤器与默认值不同时。我知道主干网提供了一个
已更改
状态,但我相信这只会告诉我自上次
设置
以来它是否已更改,而不是默认设置


如何检查模型的当前属性值是否与默认值不同?

在主干中。视图中,您必须听取模型更改:

var MyView = Backbone.View.extend({

  initialize: function(){
    this.listenTo(this.model, "change", this.compareToDefaults);
  },
  compareToDefaults: function(model){
    // here, you can compare each model value with the default ones.
    // and display or not display your RESET button.
  }
});

主干已经提供了一种方法,用于检查当前属性是否与哈希中提供的属性不同(在您的情况下,此哈希将是模型默认值)

从主干网的变更属性文档:

仅检索自之后更改的模型属性的哈希 最后一组,如果没有,则为false。可选地,外部 可以传入属性散列,返回该散列中的属性 与模型不同的散列。这可以用来找出 视图的某些部分应该更新,或者需要调用什么 将更改同步到服务器

例如,您可以编写如下内容:

var MyModel = Backbone.Model.extend({
    defaults: {
        'start-date': '2014-09-01',
        'end-date': '2014-10-01',
        'status': 'OUTSTANDING'
    },
    changedFromDefaults: function(){
        return this.changedAttributes(this.defaults) !== false; 
    }
});
然后像这样使用它:

var model = new MyModel();
console.log(model.changedFromDefaults()); //false

model.set('status', "FOO");
console.log(model.changedFromDefaults()); //true

model.set('status', "OUTSTANDING");
console.log(model.changedFromDefaults()); //false
我已经创建了,所以你可以尝试一下