2015-04-06 51 views
1

下面是一些簡化的代碼。我按下一個按鈕,它設置一些配置。然後,當用戶提交表單時,需要讀取配置的最新值。我試圖成爲所有FRP並避免設置一個正常變量。使用來自不同流的財產的價值

var currentConfig = $('#authenticateCont #btnFormType') 
     .asEventStream('click') 
     .map(function (e) { 
      ... 
     }); 

$('#authenticateCont form') 
     .asEventStream('submit') 
     .combine(currentConfig, function(r, c) { 
      return { 
       response: r, 
       config: c 
      }; 
     }) 
     .onValue(function(e){ 
      ... 
     }); 

這個工作原理除了配置發生變化時,會導致按鈕點擊處理,就像表單已經提交一樣。顯然我不想要這個。

它需要當提交表單時從配置中讀取最新值。我需要類似'combineLeft'的操作,它不存儲最近的提交事件。

加油....這件簡單的東西怎麼會這麼棘手?按一個按鈕,讀取一個值!

回答

1

我需要的東西就像一個 'combineLeft' 操作

是的,有這樣的事情:property .sampledBy (stream)。無論何時點擊提交按鈕,它都會從配置屬性中獲取當前值:

var submit = $('#authenticateCont form').asEventStream('submit'); 
currentConfig.sampledBy(submit, function(c, e) { 
    return {event: e, config: c}; 
}) 
.onValue(function(e) { … }); 
+0

aha ...是的,你必須把它調整一下,讓配置流最終處理表單單擊。 –

+0

我認爲我的combineLeft想法更直觀。 –

+0

看起來像使用屬性調用的map函數並不需要將它翻過來,但我不確定當前是否可以訪問流值。 – Bergi