2017-09-30 1 views
0

J'ai un champ dans la classe:Comment ajouter la validation à élimination directe

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

fragment 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> 

traitement d'adresses a lieu dans le module geoModuleInput et si une adresse existe ou non. Comment appeler la validation si l'adresse n'existe pas?

+0

pouvez-vous afficher le reste du code? y compris geoModuleInput? – Ray

Répondre

0

Vous pouvez utiliser le paramètre valueAccessor dans votre liaison personnalisée pour accéder à tout ce qui a été transmis à la liaison, y compris le address observable.

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 pour le tester.