处理Twitter Flight组件的多个实例的事件

时间:2013-11-22 17:51:56

标签: javascript javascript-events twitter-flight

我的目标是分离的UI架构。我希望旋转木马和分页组件彼此分开;但是,分页能够听取'uiCarouselMoved'事件的变化。

示例http://jsbin.com/uQadehI/1/edit?html,js,output

当我分别有两个旋转木马和分页实例时会出现问题。我想了解Twitter Flight中最好的设计模式,以处理Carousel和Pagination组件之间的“桥梁”,而不依赖于DOM树结构等不相关的逻辑,最好没有硬编码ID。

那么,是否有可能根据源轮播知道更新哪个分页?

2 个答案:

答案 0 :(得分:4)

创建分页mixin并将其混合到轮播中似乎是有道理的。

另一种选择是使用DOM来提供结构。通过将分页和轮播的实例附加到同一DOM节点或树,您可以在两者之间创建非声明性关系。

或者,生成唯一ID(例如,使用_.uniqueId http://underscorejs.org/#uniqueId)并将其与来自轮播的数据一起传递。这也可以包含在响应中,允许组件确定他们是否对全局事件感兴趣。

TweetDeck在各种情况下使用所有这三种方法。使用DOM作为结构不需要额外的样板,尽管它也是最隐含的关系。使用ID非常具体,但在事件触发器和处理程序中需要额外的样板。使用mixin不需要样板,并且非常具体,但确实会产生依赖关系,您可能希望避免使用它。

答案 1 :(得分:1)

我会分别制作mixins,with_carousel和with_pagination的分页和轮播,而不是单个组件。这将允许您在同一组件中使用它们,并将该组件附加到新的外层dom节点。这将允许您在本地侦听uiCarouselMoved事件,而不是将侦听器附加到文档。

这里有一个例子: http://jsbin.com/iZeLABAW/1/edit