javascript - 使用 Bacon.js 在容器中列出

标签 javascript backbone.js frp bacon.js

我有一个元素列表和一个列表容器。 (它们是通过 Marionette + Backbone View 实现的)。

我想做的是注册对列表的点击并将其发送到带有 bacon.js 或类似内容的容器。

这相当容易,例如: this.selected = this.$el.asEventStream('click').map(this);,以便我可以突出显示所选项目。

现在的问题是,一旦选择了另一个元素,就必须取消选择旧的元素,我不确定这里使用什么策略。

我不想改变容器中的列表。

编辑以澄清:

我现在的代码在这里:

https://github.com/archaeron/Marionette.CompoundView

我仍然在传统事件中这样做,但我想尝试另一种方式。

最佳答案

我不知道如何使用 Backbone 正确实现它,但是单独使用 Bacon 我会做这样的事情:

$container = $('.container')

itemClicks = $container.asEventStream('click', '.item').map (event) ->
  $(event.target)

nonContainerClicks = $(document).asEventStream('click').filter (event) ->
  not $.contains($container.get(0), event.target)

selectedItem = Bacon.mergeAll(
  itemClicks,
  nonContainerClicks.map(-> null)
).toProperty(null)

selectedItem.onValue (itemEl) ->
  $('.container').find('.item.selected').removeClass('selected')
  if itemEl isnt null
    itemEl.addClass('selected')

不确定它是否有帮助,但可能至少会给你一些想法。

关于javascript - 使用 Bacon.js 在容器中列出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20968398/

相关文章:

javascript - 使用 Javascript 更改以破折号开头的 css 属性

javascript - ES6 中的 Backbone 事件

rest - 在 Backbone.js 中处理 REST API 'create' 响应的最佳方法是什么

swift - 在 Swift 中观察子类属性(Reactive Cocoa)

haskell - Haskell 生命游戏在启动时崩溃

java - 如何从 grails 和 groovy 的下拉列表中选择小于或大于的年龄

javascript - 使用 JavaScript 自动提交 Php 表单

javascript - 合并数组中的重复对象

javascript - 停止应用于主干中同一事件对象的事件传播

haskell - Reactive-Banana 中的动态事件切换