人们想知道以下情况的最佳实践和 API 详细信息。
假设我们有一个模型选择:
Selection = Backbone.Model.extend({
defaults: {
value : null,
related: null,
other: null,
stuff: null
}
}
如果我们只更改“值”而不设置“相关”,那么我们希望将“相关”设置为空——一种级联更新。
当 'value' 改变时,还有其他侦听器需要查看 'related' 的更新值。因此,我们希望保证当调用任何这些侦听器时,“相关”会相应更新。
因此,也许我们可以让 Selection 模型本身监听“change:value”,并在必要时设置“related”。但是 Backbone 是否保证该侦听器会在任何其他“change:value”侦听器之前被调用?同样,是否保证合格事件将在通用事件之前触发,所以在“更改”之前“更改:值”?
依靠事件系统来做这件事似乎很脆弱,所以我们寻找了一些钩子。我们能找到的最接近的东西是 _validate/validate 方法,我们可以在其中添加到我们的选择模型中,例如:
// Use _validate as a "before-set call" to set 'related' if necessary
_validate: function(attrs, options) {
if (!_.has(attrs, 'related') && _.has(attrs, 'value') &&
!_.isEqual(attrs.value, this.attributes.value)) {
attrs.related = null;
}
return true;
}
当然,这违背了“验证”所隐含的语义。
非常感谢任何指导。