2015-05-19 130 views
1

我最近開始玩弄bacon.js,不知何故,我真的很喜歡用功能性反應式編程風格組合EventStream的想法。使用baconjs進行表單驗證

我目前正在實施表單驗證。 當前代碼:

var name = textInputAsEventStream("#name"); //transforms input to evenStream 
var nameValid = name.map(specificValidationFunction); //here I validate a name that enters a stream 
nameValid.onValue(function(valid){//do something with jquery at the web interface, i.e. feedback of the validation} 

問題是,當你有一個像20的形式來驗證變量爆炸。 (極端的例子)有沒有人有任何想法如何以優雅的方式解決這個問題?

我不知道,如果下面的代碼是真的要走的路:

var valid = nameValid.and(surnameValid).and(adressValid).and(codeValid).and(cityValid).and(telValid).and(emailValid); 
//here I compose al 'validition'-streams into one 

有什麼建議?

回答

0

你基本上有正確的做法。將公共部分重構爲輔助函數將有助於樣板。

理清如果整個形式是有效的,你可以使用數組方法:

// Add all your validation streams to an array 
var validityStreams = [ nameValid, surnameValid, adressValid ] 
var formValid = Bacon.combineAsArray(validityStreams) 
    .map(function(validityArray) { 
    return validityArray.every(function(val) { return val }) 
    })