如何为淘汰赛添加验证

时间:2017-09-30 15:49:10

标签: javascript knockout.js observable

我在班上有一个字段:

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中进行,地址是否存在。

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

1 个答案:

答案 0 :(得分:0)

您可以使用自定义绑定中的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用于测试。