如何将observable限制为仅仅是Knockout.js中的某组值?

时间:2013-04-18 23:27:59

标签: knockout.js knockout-validation

我将以下输入类型绑定到我的视图模型中可观察的“页面”。

<input type="text" data-bind="value: page"/>

用户可以在文本输入中输入任何值,但是如果值在值列表中,我只希望绑定发生在我的模型中。我查看了淘汰验证框架,并构建了适当的扩展来引发错误,但是我找不到确保在我的模型中不更新“page”属性的方法。

有没有其他人使用Knockout.js遇到这种情况?

谢谢! -Bob

1 个答案:

答案 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 */] });