2013-05-28 30 views
1

我有一個要求用戶輸入其物理地址的KnockoutJS應用程序。默認情況下,我們提供的字段映射到我們主要經營的國家/地區的地址組成部分 - 具體而言,我們需要美國的城市,州和郵政編碼。這些字段以及「地址」字段是必需的。這是美國地址的典型表述。直到運行時才知道驗證規則時使用Knockout驗證

但我們也有一個複選框,允許他們輸入任何國家的地址。如果他們檢查那個盒子,我們就會擺脫城市,州和郵箱,並用「國家」框替換這些字段。因此他們有一個「地址」和「國家」框,它們都是必需的。城市,州和郵編是隱藏的,不應該被要求。

我無法弄清楚如何爲此設置驗證。實質上,我們不知道在運行時需要哪些字段,當用戶指出他們是否有美國或非美國地址時。

你如何用Knockout Validation做到這一點?

回答

0

對於驗證規則,可能有幫助的是onlyIf構造。例如,postal codes are not required in Ireland,所以你可能有這樣的視圖模型:

var viewModel = { 
    availableCountries : ko.observableArray(["United States", "Canada", "Ireland"]), 
    country : ko.observable("United States") 
}; 

viewModel.zip = ko.observable("").extend({ required: { onlyIf: function() { return viewModel.country() !== "Ireland"; } }}); 
viewModel.errors = ko.validation.group(viewModel); 

在這種情況下綁定到zip觀察到任何input將只需要美國和加拿大,而不是愛爾蘭。有關上述演示,請參閱this fiddle

+1

謝謝,這做了我所需要的。我找不到任何關於onlyIf參數的文檔,所以我添加了一個wiki頁面。如果您有一分鐘時間來審覈並更新它,我確信很多KO驗證用戶會很感激 - 包括我在內! :-) https://github.com/Knockout-Contrib/Knockout-Validation/wiki/Conditional-Validation – Josh