2014-01-09 115 views
1

我有一個表單有三個字段組,點擊一個「添加新」按鈕後,其他三個字段組將被添加。這部分工作很好。KnockoutJS動態表單驗證

enter image description here

我要加那麼所有三個字段是必需的,以添加新組的確認。

僅供參考這裏是代碼的工作:http://jsfiddle.net/5g8Xc/

var ContactsModel = function(contacts) { 
    var self = this; 
    self.contacts = ko.observableArray(ko.utils.arrayMap(contacts, function(contact) { 
     return { firstName: contact.firstName, fathersLast: contact.fathersLast, country: contact.country }; 
    })); 

    self.addContact = function() { 
     self.contacts.push({ 
      firstName: "", 
      fathersLast: "", 
      country: "" 
     }); 
    }; 

    self.removeContact = function(contact) { 
     self.contacts.remove(contact); 
    }; 
}; 

關於如何執行此驗證任何線索?我試圖使用jquery驗證來做到這一點,但我認爲這可能與KnockoutJS。

欣賞任何建議。

+1

查看Knockout驗證https://github.com/Knockout-Contrib/Knockout-Validation您可以在視圖模型中定義驗證。 – Joe

+0

上面的評論符合這個問題的答案 – XGreen

+0

我已經實施了驗證,但我總是有效的!任何線索? http://jsfiddle.net/8Hude/3/ – VAAA

回答

3

如前所述,the validation plugin將成爲最優雅,更少重新發明的解決方案。

編輯:利用評論implementation經過驗證插件

隨着的是,除了,你有幾個選項。

  • 如果你有信心的接觸對象永遠只包含所需的字段,一個不很健壯的實現會在接觸確保每個有一定價值的屬性進行迭代。

  • 稍微更健壯一些,但仍缺乏插件的優雅,實現將維護一個必需的字段數組並使用該數組進行驗證。您可以參考my example進行此設置。基本上,每個必需的屬性都映射到observables。對任何可觀察屬性的值所做的更改會觸發(通過subscription)突變,調用computed中使用的虛擬可觀察值。這是必需的,因爲計算機不能調用valueHasMutated。突變調用觸發計算重新評估,從而更新UI。

+0

我可以得到這個工作,但添加的新元素不跟蹤驗證... http://jsfiddle.net/8Hude/6/任何線索? – VAAA

+1

你很近。我相信,[這裏](http://jsfiddle.net/origineil/5Cjye/)就是你以後的樣子。 – Origineil

+0

非常感謝! – VAAA