2014-05-19 117 views
1

我試圖根據提供的條件顯示不同的驗證消息,但消息顯示不正確。這個函數中使用的所有方法都按要求工作正常。根據驗證規範,敲除驗證不會更新錯誤消息

我附上代碼:

self.pickupCloseTime.extend({ 
    required: { 
     message: "Please select Close time.", 
    }, 
    validation: { 
     validator: function (val) { 
      if (val == "") { 
       this.message = "Please select Close time."; 
       return false; 
      } 
      else if (self.pickupReadyTime() != "") { 
       var readyTime = moment(self.pickupReadyTime(), "hh:mm A"); 
       var closeTime = moment(val, "hh:mm A"); 

       if (closeTime.diff(readyTime) > 0 
         && (closeTime.diff(readyTime)/3600) < 2000) { 
        this.message = 'Please select valid Close time.'; 
        return false; 
       } 
       else if (closeTime.diff(readyTime) <= 0) { 
        this.message = "Close time should be greater than Ready time."; 
        return false; 
       } 
       return true; 
      } 
      else { 
       this.message = 'Please select Ready Time first.' 
       return false; 
      } 
     }, 
     message: "Close time should be greater than Ready time.", 
     params: true 
    } 
}); 

請幫助。

+1

可以你創建一個JSFiddle:http://jsfiddle.net – Tanner

回答

0

最佳做法是將它們拆分爲更小的驗證案例,每個案例都有自己的條件和消息。

您還可以添加爲自定義的驗證規則是重用,這裏有一個例子:

define(['knockout', 
    'data/settings', 
    'services/resourceService'], 
function (ko, settings, resourceService) { 

    ko.validation.rules['closeTimeNotValid'] = { 
     // check if close time is Valid 
     validator: function (val) { 
      //example rule 
      return val != "" && val > 0; 
     }, 
     message: "Please select valid Close time." 
    }; 
      return ko.validation.rules; 
}); 

然後你可以使用/如果需要重新使用這個規則:

self.pickupCloseTime.extend({ 
    required: { 
     message: "Please select Close time." 
    }, 
    closeTimeNotValid: { 
     message: "Message overrides the custom rule's message", 
     //add more rules/conditions to the main one, you can also 
     //set params here to be used in the custom validation 
     onlyIf: function() { return self.someOtherField(); } 
    } 
});