2014-01-07 3 views
1

У меня есть список элементов и контейнер для списка. (Они реализованы с марионеткой + Backbone).Список в контейнере с Bacon.js

Что бы я хотел сделать, это зарегистрировать клик по списку и отправить его в контейнер с помощью bacon.js или что-то подобное.

Это довольно легко с чем-то вроде: this.selected = this.$el.asEventStream('click').map(this);, чтобы я мог выделить выделенный элемент.

Проблема заключается в том, что, как только будет выбран другой элемент, старый должен быть не выбран, и я не уверен, какую стратегию использовать здесь.

Я бы не хотел мутировать список из контейнера.

Изменить, чтобы уточнить:

Кода у меня есть на данный момент здесь:

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

И я до сих пор делаю это с традиционными событиями, но я хотел бы попробуйте другой способ сделать это.

ответ

1

Я не знаю, как правильно реализовать его с Backbone, но только Бэкона я хотел бы сделать что-то вроде этого:

$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') 

Не уверен, если это поможет, но может быть даст вам некоторые по крайней мере, мысли.

+0

Благодарим вас за ответ! Я только что понял, что позвоночник и марионетка действительно не кажутся беконом :( Я хотел попробовать вашу версию, но возникают сложности – Archaeron

+1

Всем нравится бекон> :( – xPheRe

Смежные вопросы