2015-05-19 78 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 }) 
    })