Backbone.js - 在集合中查看将项目添加到另一个(兄弟)集合

时间:2012-02-09 12:53:54

标签: backbone.js

在我的示例中,我有一个父模型(ModelParent),其中包含两个集合(A和B),分别包含ModelAModelB。每个模型都有关联的视图(ViewParentViewAViewB

我想在ViewA中添加一项功能,将新项目添加到CollectionB

最好的方法是什么? (以下几种可能性):

  • ViewA是否应该ViewParent传递给ViewParent的引用?怎么做到最好? (据我所知,现在在构建父参考中)
  • window范围内应ViewA存储,以便window.ViewA可以像{{1}}那样引用它吗? (这对我来说似乎不对)

2 个答案:

答案 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);

为触发器调用添加其他参数,以将它们传递给绑定到事件的任何回调。