我最近选择了 Bacon.js 并用它做了一些 UI,其中只有满足要求时才启用“注册”按钮,其中之一是检查用户名是否有效。
// Returns true or string with invalid reason
var isUsernameValid = username
.map(function(value) {
if(value.length < 4) {
return 'Must be 4 characters at least';
}
if(!config.patterns['username'].test(value)) {
return 'Can only have letters, numbers, periods, or underscores';
}
return true;
});
它要么返回 true,要么返回用户名无效的原因。
后来我将所有结果与此结合起来:
password.and(username).and(isUsernameValid)
.not().assign($(view['signup-submit']), 'toggleClass', 'disabled');
用户名和密码仅在有输入时才为 true,但由于 isUsernameValid
始终返回一个真实值,因此按钮最终会被错误启用。
是否有更好的方法来返回错误或通过传递函数来组合属性?
我想过声明另一个流/属性,以便在 value === true
时返回,但我试图避免这种情况。
最佳答案
问题是因为您的真实值包括有效和无效的情况。该函数永远不会返回错误值。如何将无效值和有效值分成真值和假值?
var isUsernameInvalid = username
.map(function(value) {
if(value.length < 4) {
return 'Must be 4 characters at least';
}
if(!config.patterns['username'].test(value)) {
return 'Can only have letters, numbers, periods, or underscores';
}
return false;
});
然后,对原来的代码没有太多改动
password.and(username).and(isUsernameInvalid.not())
.not().assign($(view['signup-submit']), 'toggleClass', 'disabled');
关于javascript - Bacon.js 仅当 prop === true 时才将属性与 .and() 结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31066317/