2012-08-13 110 views
1


我嘗試使用KnockoutJs validation plugin,我遇到了問題。在從輸入發佈數據之前,我驗證該值,如果它是正確的,我發佈它並將我的viewmodel重置爲默認狀態,如果值不正確我通過添加一些css類將輸入包裝到紅色邊框中(或添加錯誤消息)。問題是這隻有一次:在發佈數據後,我重置我的viewmodel爲默認狀態(如我之前所說),輸入字段變爲空,如果我嘗試發佈這個空數據,驗證工程,但css類doesn'不適用(錯誤消息不會出現)。請嘗試我的Fiddle example,有什麼問題?KnockoutJS驗證插件不顯示錯誤消息

* [更新]。

於是,我找到了解決方法:只需要添加額外的代碼數據綁定屬性

validationElement: itemToAdd().Name 

應該

<input data-bind='value: itemToAdd().Name, validationElement: itemToAdd().Name' /> 

它的工作原理,但看起來不錯。無論如何,如果有人能夠修復我以前的代碼,這將是一件好事。

回答

0

只要改變

var t = ko.validation.group(viewModel.itemToAdd()) 

var t = ko.validation.group(viewModel.itemToAdd) 
+1

但是在這種情況下,輸入字段的值在點擊按鈕後不會被清除。 – SamousPrime 2012-08-13 10:12:54

0

我已經把一個fiddle舉例說明我的答案。

解決此問題的一種方法是讓您的activeAccount對象具有一個屬性,我稱爲我的errors,該屬性將包含該對象的所有驗證消息。

var activeAccount = function(data) { 
    this.Id = ko.observable(data.id); 
    this.Name = ko.observable(data.name).extend({ required: { message: 'Enter account name.'} }); 
    this.UserId = ko.observable(1); 
    this.errors = ko.validation.group(this); 
}; 

var viewModel = { 
    items: ko.observableArray([]), 
    itemToAdd: ko.observable(new activeAccount({})), 
    createItem: function (item) { 
     if (item.errors().length == 0) { 
      viewModel.items.push(item); 
      viewModel.itemToAdd(new activeAccount({})); 
     } else { 
      item.errors.showAllMessages(); 
     } 
    } 
}; 

一旦您保存的項目(無論是發送到服務器,推到observableArray或兩者)你然後通過傳遞一個空對象來構造其設置爲new activeAccount({})「復位」 itemToAdd