我在班上有一个字段:
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
中进行,地址是否存在。
如果地址不存在,如何调用验证?
答案 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用于测试。