我有一个模型,它的属性比默认属性多。我需要在guest
更改时清除所有属性,并设置回默认值,这样我就不会携带不必要的属性。
由于change:guest
事件,清除所有属性并将默认值设回会导致无限循环。
如何删除除一个属性之外的所有属性?
当Model属性被设置回默认值时,有没有办法不触发另一个change事件?
或者删除默认设置中未列出的任何内容?
这是我的模型
defaults: {
_id: 'id',
first_name: 'first_name',
last_name: 'last_name',
guest: true
}
我监听'guest'更改事件
this.on('change:guest', this.reset);
change事件调用reset
来更新Model,显然这会导致无限循环。
reset: function() {
var new_defaults = _.clone(this.defaults);
this.clear({silent: true});
this.set(new_defaults);
}
1条答案
按热度按时间relj7zay1#
我已经做了一个
reset
函数,你可以很容易地添加到一个基本的 Backbone 模型。我会在another answer中详细介绍这个解决方案。它比一个简单的
.clear
后跟一个.set
要好,因为它将defaults
合并回模型中,让任何传递的attributes
像初始化时一样覆盖它们。然后您的模型:
这样,当
onGuestChange
处理程序改变guest
时,您可以更灵活地处理所发生的事情,这使得您可以根据需要调用reset
,这里使用了{ silent: true }
选项。概念验证
第一个
你不需要克隆默认值来使用它们,如果它们有一个数组或者嵌套的对象,
defaults
应该是一个返回对象的函数。然后,使用
_.result
调用默认值:_.result(this, 'defaults')
类似于我的reset函数。defaults
的 Backbone.js 文档中有以下注意事项: