【问题标题】:How to add validation to knockout如何为淘汰赛添加验证
【发布时间】:2018-03-12 06:38:51
【问题描述】:

我在课堂上有一个字段:

self.address = ko.observable().extend({
    required: true,
    maxLength: {
        params: 1000,
        message: 'Long address'
    },
    validation: {
        validator: function(val, substring) {
            return /*...*/;
        },
        message: 'Address not found',
        params: ''
    }
});

HTML 片段:

<div class="form-additem-group-row__col form-additem-group-row__col_field">
    <input type="text" id="addressInput" class="field field_type2 input--full" placeholder="Enter the address" data-bind="textInput: address, geoModuleInput: { mapObject: map, debugSuggestCont: '#currentSuggest', valueText: address, valueKey: addressKey, valueMetroName: metroName, valueMetroDuration: metroDuration, valueGeoCodeResult: geoCodeResult }"/>
    <div class="form-additem-group-row__error" data-bind="validationMessage: address"></div>
</div>

地址处理发生在模块geoModuleInput中,以及地址是否存在。

地址不存在如何调用验证?

【问题讨论】:

  • 你能显示其余的代码吗?包括geoModuleInput?

标签: javascript knockout.js observable


【解决方案1】:

您可以在自定义绑定中使用valueAccessor 参数来访问传递给绑定的任何内容,包括可观察的address

ko.bindingHandlers.geoModuleInput = {
    init: function (element, valueAccessor, allBindingsAccessor) {
        // if you have any custom binding initialization
    },
    update: function (element, valueAccessor, allBindingsAccessor) {
        // valueAccessor() has the object that was passed
        // it has properties like "mapObject", "valueText" etc
        // or you can also use ko.utils.unwrapObservable(valueAccessor());
        var bindingData = valueAccessor();

        console.log(bindingData.valueText()) // gives the value in address observable

        if(bindingData.valueText.isValid()) {
            alert("the address is valid");
        }
    }

Here's a fiddle 进行测试。

【讨论】:

    猜你喜欢
    • 2015-06-05
    • 2012-02-18
    • 2011-08-09
    • 2015-02-01
    • 2012-11-04
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 2012-12-05
    相关资源
    最近更新 更多