2015-12-09 54 views
0

我正在使用Knockoutjs.com爲「聯繫人編輯器」提供的示例。嵌套集合上的敲除驗證

http://jsfiddle.net/rniemeyer/gZC5k/

我使用我的網站上完全相同的代碼,現在需要驗證缺少對提交信息。

這裏有我想要的形式來實現驗證規則:

  1. 不允許提交表單如果有的話(需要姓名和電話)領域是空白的。
  2. 如果姓名沒有任何電話號碼(家長無子女),則不允許提交表格。
  3. 不允許提交表單,如果沒有名稱(完全空白的形式沒有父)

我可以計算出如何分析的唯一事情是缺少的名字:

contacts().length = 0 
+1

你看過基因敲除驗證嗎? https://github.com/Knockout-Contrib/Knockout-Validation –

+0

我看過淘汰賽驗證,並在我的項目中包含插件,但是我無法讓它在observableArray上工作。我寧願使用Knockout驗證方法。 – PegR

回答

1

您可以在視圖模型中引入附加標誌,例如「isValid」:

self.isValid = ko.computed(function() { 
    if(self.contacts().length === 0) { 
    return false; 
    } 
    var allContactsHaveNames = self.contacts().filter(function(contact) { 
    return contact.firstName() !== "" && contact.lastName() !== ""; 
    }).length === self.contacts().length; 
    return allContactsHaveNames; 
}); 

並在其中進行所有檢查。

當然,這需要在標記的變化:

<button data-bind='click: save, enable: isValid'>Save to JSON</button> 

和可觀察到的 「名字」 和 「姓氏」 字段:

self.contacts = ko.observableArray(ko.utils.arrayMap(觸點,function(contact){ return {firstName:ko.observable(contact.firstName),lastName:ko.observable(contact.lastName),phones:ko.observableArray(contact.phones)}; }));

self.addContact = function() { 
    self.contacts.push({ 
     firstName: ko.observable(""), 
     lastName: ko.observable(""), 
     phones: ko.observableArray() 
    }); 
}; 

任何額外的檢查都可以添加到「isValid」複合函數中。

您可以檢查更新的jsfiddle

P.S.您可以使用Knockout驗證,如評論中建議的@ Sam.C。