我将以下输入类型绑定到我的视图模型中可观察的“页面”。
<input type="text" data-bind="value: page"/>
用户可以在文本输入中输入任何值,但是如果值在值列表中,我只希望绑定发生在我的模型中。我查看了淘汰验证框架,并构建了适当的扩展来引发错误,但是我找不到确保在我的模型中不更新“page”属性的方法。
有没有其他人使用Knockout.js遇到这种情况?
谢谢! -Bob
答案 0 :(得分:2)
你应该可以通过扩展你的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 */] });