在我的 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() 方法调用的源视图来在模型本身中处理这个更有意义。这可能吗?