我有一个具有以下默认值的模型:
Entities.OrdersFilter = Backbone.Model.extend({
defaults: {
'start-date': '2014-09-01',
'end-date': '2014-10-01',
'status': 'OUTSTANDING'
},
localStorage: new Backbone.LocalStorage('OrderFilters')
});
这三个属性表示可由用户更改的过滤器。我需要显示一个" Clear Filters"按钮,但仅当过滤器与默认值不同时。我知道Backbone提供hasChanged
状态,但我相信只会告诉我自上次set
后它是否发生了变化,而不是默认值。
如何检查模型的当前属性值是否与默认值不同?
答案 0 :(得分:2)
Backbone已经提供了一个changedAttributes方法,用于检查当前属性是否与您在散列中提供的属性不同(在您的情况下,此散列将是模型的默认值)。
来自Backbone< strong> changedAttribute 文档:
仅检索自此更改的模型属性的哈希值 最后一组,如果没有,则为假。可选地,外部 属性hash可以传入,返回属性 hash与模型不同。这可以用来找出哪个 应该更新视图的某些部分,或者需要进行哪些调用 将更改同步到服务器。
所以你可以写一些类似的东西:
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
我已创建a fiddle,因此您可以尝试一下。
答案 1 :(得分:0)
在Backbone.View中,您可以聆听模型更改:
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.
}
});