我将以下输入类型绑定到视图模型中可观察的“页面”。
<input type="text" data-bind="value: page"/>
用户可以在文本输入中输入任何值,但如果值在值列表中,我只希望绑定发生在我的模型中。我查看了敲除验证框架并构建了适当的扩展来引发错误,但我找不到确保模型中的“页面”属性不更新的方法。
有没有其他人在使用 Knockout.js 时遇到过这种情况?
谢谢!-鲍勃
我将以下输入类型绑定到视图模型中可观察的“页面”。
<input type="text" data-bind="value: page"/>
用户可以在文本输入中输入任何值,但如果值在值列表中,我只希望绑定发生在我的模型中。我查看了敲除验证框架并构建了适当的扩展来引发错误,但我找不到确保模型中的“页面”属性不更新的方法。
有没有其他人在使用 Knockout.js 时遇到过这种情况?
谢谢!-鲍勃
你应该能够通过扩展你的 observable 来做到这一点。
文档位于http://knockoutjs.com/documentation/extenders.html
以下是可能满足您需求的示例:
ko.extenders.allowedValues = function (target, valuesArray) {
var result = ko.computed({
read: target,
write: function (newValue) {
if (valuesArray.indexOf(newValue) !== -1) {
target(newValue);
} else {
//handle the user inputting a value not allowed here
}
}
});
result(target());
return result;
};
然后你会像这样创建 observable:
var page = ko.observable().extend({
allowedValues: [ /* place the allowed values in this array */] });