2016-12-06 3 views
1

Попытка создать что-то, но застревать и пропустить все ошибки. Я хочу отслеживать нажатия кнопок, но получить значение из ввода #zip, поэтому поэтому я выбрал mapTo. Когда я удаляю mapTo, я могу отслеживать клики и изменять свой оператор в функции подписки, чтобы обновить текст div с содержимым ввода #zip (точно так же, как я делаю в mapTo), что меня смущает, потому что я думаю, что синтаксис выглядит нормально ,Что не так с моей инструкцией MapTo

Rx.Observable.fromEvent(document.getElementById('btn'),'click') 
    .mapTo($('#zip').val()) 
     .subscribe(function(zipCode){ 
     $('#result').text(zipCode); 
     }); 

jsbin

ответ

2

Если я понимаю, что вы хотите сделать, вы пытаетесь обновить $('#result') с текущим значением $('#zip') в момент возникновения события.

Оператор mapTo() принимает одно значение в качестве аргумента. Затем это значение используется вместо каждого значения, исходящего из его источника. Фактически это означает, что .mapTo($('#zip').val()) инициализируется только один раз, когда вы создаете цепочку наблюдаемых (даже до того, как вы подписаны на нее).

Если вы хотите, чтобы это всегда было фактическим значением, вам понадобится оператор, который выполняет обратный вызов в качестве параметра. К примеру просто map():

Rx.Observable.fromEvent(document.getElementById('btn'), 'click') 
    .map(function(val) { 
    return $('#zip').val(); 
    }) 
    .subscribe(function(zipCode){ 
    $('#result').text(zipCode); 
    }); 

Обновленное демо: http://jsbin.com/qepalo/1/edit?html,js,console,output

+0

спасибо за полное объяснение того, почему это не сработало, я ценю это – Barry

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