2014-10-25 2 views
1

В экспериментируя с Bacon.js, я наткнулся на следующее неожиданное поведение:Bacon.when не соответствующие потоки, как и ожидалось

var email = $("#email") 
          .asEventStream("keyup") 
          .map(function(event) { 
           return $(event.target).val(); 
          }) 
          .log(); 

    var validEmail = email.map(validateEmail).log(); 

    // submit.doAction('.preventDefault'); isn't working for some reason 
    $('form').on('submit', function (event) { event.preventDefault() }); 

    var submit = $('form').asEventStream('submit'); 

    // postFormData is never called 
    Bacon.when([email, validEmail, submit], postFormData); 

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

Fiddle

+0

Bacon.js omg Это выходит из-под контроля. – DSF

ответ

2

Вы никогда ничего не делать с результатом Bacon.when, так ленивы оценка вызывает postFormData никогда не будет называться.

Как правило, что-то, что вызывает побочные эффекты, такие как отправка данных на сервер, должно выполняться в обработчике onValue. Объединение различных EventStream должно выполняться с использованием чистых функций.

Я обновил ваш fiddle, добавив .log в конце.

+0

ОК - это имеет смысл. [Документы] (https://github.com/baconjs/bacon.js/#join-patterns-as-a-chemical-machine) могли бы лучше объяснить, что у вас есть. (Нет никакого назначения результата 'when', и функции сопоставления (т. Е.' Make_water') будут иметь побочные эффекты.) Вы должны рассмотреть возможность отправки PR! – pdoherty926

+0

Это одна из главных ошибок в Bacon.js, с которыми сталкиваются многие люди. – OlliM

+0

В качестве побочного примечания вам не нужен 'Bacon.when' для такого рода кода, просто сделайте' comb', 'combWith' и' combTemplate'. – OlliM

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

  • Нет связанных вопросов^_^