在我的示例中,我有一个父模型(ModelParent
),其中包含两个集合(A和B),分别包含ModelA
和ModelB
。每个模型都有关联的视图(ViewParent
,ViewA
和ViewB
)
我想在ViewA
中添加一项功能,将新项目添加到CollectionB
。
最好的方法是什么? (以下几种可能性):
ViewA
是否应该ViewParent
传递给ViewParent
的引用?怎么做到最好? (据我所知,现在在构建父参考中)window
范围内应ViewA
存储,以便window.ViewA
可以像{{1}}那样引用它吗? (这对我来说似乎不对)答案 0 :(得分:3)
除了直接收听来自您的收藏集的事件之外,另一种选择是使用 eventBus 。来自Los techies的Derick Bailey写了一篇很好的article,他通过eventBus介绍了不同组件(在他的案例视图中)之间的通信。
如果你坚持使用 coffeescript - 可能即使你不是 - 你也应该从Adam Thurlow那里检查这个好extension。
旁注:如果您的情况只需要在两个元素之间进行通信,则eventBus很可能是过度杀伤,尽管这个想法非常简单。除此之外,我相信,通信的核心组件值得付出努力,因为它简化了消息传递,支持解耦并为您的架构提供可靠的一致性。
答案 1 :(得分:2)
我会考虑以不同的方式思考它。我相信如果你不必在你的观点周围传递参考文献会更清晰。相反,使用backbone的内置事件模型并在ViewParent中保留“将新项添加到CollectionB”逻辑。当ViewParent实例化ViewA时,您可以立即绑定到它上面的事件:
this.viewA = new ViewA({});
this.viewA.bind("some_event_that_requires_adding_to_collection", this.onViewAEvent);
在ViewA内部,只要您想要添加到CollectionB,只需触发事件:
this.trigger("some_event_that_requires_adding_to_collection", itemIWantToAdd);
为触发器调用添加其他参数,以将它们传递给绑定到事件的任何回调。