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
我已经创建了,所以你可以尝试一下