2013-04-01 98 views
1

我使用淘汰賽JS驗證與http://ericmbarnard.github.com/Knockout-Validation/驗證引擎開始,我並不清楚如何做到以下幾點:如何?與淘汰賽JS驗證

1)說我想設置一個特定的領域需要基於一個條件。我怎麼做? 例如
this.Username = ko.observable()。extend({required:true}); //只有當this.UserType = 2等時,才能使所需的= true。

2)我已驗證消息正在被驗證的字段旁邊。我只想在該字段旁邊出現一個'*',並將錯誤消息顯示在頁面底部的validationsummary字段中。所有驗證錯誤都應顯示在那裏。怎麼做?

3)表單提交後才能避免,直到表單驗證通過。現在,我收到驗證錯誤消息,仍然提交表單。所以我想我做錯了什麼。以下是我的代碼:

$(document).ready(function() { 
var model; 

// enable validation 
ko.validation.init(); 


$.ajax({ 
    type: "POST", 
    url: SERVER_PATH + '/jqueryservice/DataAccessService.asmx/GetData', 
    async: false, 
    data: "{ }", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (result, status) { 
     model = new ViewModel(result); 
     ko.applyBindings(model); 
    }, 
    error: GetDataError 

}); 

$('#submit').click(function() { 
    var data = ko.toJS(model); 
    delete data.Vehicles; 
    delete data.CopyWeeks; 
    delete data.SetupTotal; 
    delete data.CloseTotal; 

    var mappedItems = ko.utils.arrayMap(data.DailyItemList, function (item) { 
     delete item.Add; 
     delete item.Delete; 
     return item; 
    }); 
    data.DailyItemList = mappedItems; 

    $.ajax({ 
     type: "POST", 
     url: SERVER_PATH + '/jqueryservice/DataAccessService.asmx/ProcessData', 
     async: false, 
     data: ko.toJSON(data), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (result, stat) { 
      alert(success); 
      return false; 
     }, 
     error: function (e) { 
      alert(e); 
     } 
    }); 
}); 

});

在此先感謝您的幫助。

編輯: 我已經看到了,我可以設置驗證配置如下: ko.validation.configure({ decorateElement:假的, errorMessageClass: 'ERRORMSG', insertMessages:假的, parseInputAttributes:真, messageTemplate:'sErrorMsg' }); ko.validation.init();

,但我不知道我該怎麼定義我的錯誤信息模板 'sErrorMsg'

回答

3

1)。假設我想根據條件設置所需的特定字段....

對於此ko驗證包含native rule。你可以這樣做:

var myObj = ko.observable().extend({ required: { 
      onlyIf: function() { 
         //here you can place your codition and can return.. 
         //true or false accordingly 
        } 
      }}); 

2)。我已將驗證消息發射到正在驗證的字段旁邊。

對此,您應該檢查Validation Binding。在這個驗證中,選項可以爲你完成這項工作。

更新:這裏是一個小提琴演示使用messageTemplate綁定根據您的要求。

http://jsbin.com/ocizes/3/edit

3)。表單提交將被避免,直到表單驗證通過....

爲此,您可以使用使用group,如:

yourViewModel.Errors = ko.validation.group(yourViewModel); 

現在錯誤屬性包含您的觀測量的錯誤信息,如果有的話。所以在提交表單之前,你可以放一些類似的東西:

 if(yourViewModel.Errors().length == 0) { 
     //submit the form 
     } 
     else { 
     yourViewModel.Errors.showAllMessages(); 

     //this line shows all the errors if validation fails, 
     //but you can omit this. 
     } 
+0

好的,我得到了1)和3)的工作。非常感謝。但2對我來說依然是個謎。我瀏覽了您鏈接的Github文檔,但無法弄清楚如何使用它。你能舉個例子嗎?另外,yourViewModel.Errors.showAllMessages()會做什麼?我無法得到這個工作。 – devC

+0

你能幫我解決這個問題嗎? – devC

+0

yaa當然,請檢查更新的答案和小提琴,並讓我知道是否有任何進一步的疑問。 – gaurav