在我的 Backbone.js 项目中,我有一个模型和几个视图。'change:currentTextTitle'所有视图都在此模型上注册了回调:
// 'this' stands for any of the Views here
myModel.on('change:currentTextTitle', this.render, this);
现在用户执行一些操作,这会导致特定视图更改其“当前文本标题”字段。然后,这个特定myModel.set("currentTextField", newTextValue)的视图调用它又触发'change:currentTextTitle'调用所有视图的事件(包括 set() 起源的那个)。然后所有视图调用它们的render回调函数。
问题是该render方法也在最初调用 set()-Method 的 View 上调用,这是完全没有必要的,因为它已经与currentTextTitle.
我的视图如何调用 myModel.set() 以通知其他视图的回调,但不触发/调用“源视图”本身?
一种解决方法似乎是将源视图作为方法options参数的一部分set()传递(传递给回调trigger(),然后传递给render()回调):
myModel.set("currentTextField", newTextValue, thisViewSetAttribute)
然后在render回调中可以检查是否thisViewSetAttribute != this. 但是,我认为不是在每个回调中实现检查,而是通过仅调用必要的回调并忽略发起 set() 方法调用的源视图来在模型本身中处理这个更有意义。这可能吗?