2013-01-10 40 views
2

我有以下代碼,它工作正常,當您在插入項目後清除屬性時,除了。錯誤馬上顯示出來。敲除驗證和正確的方式來清除控件

ko.validation.configure({ 
     insertMessages: false, 
     decorateElement: true, 
     errorElementClass: 'error' 
    }); 

FirstName: ko.observable().extend({ 
      required: true 
     }), 

,我有在淘汰賽視圖模型添加方法

addItem: function() { 
      if (!viewModel.isValid()) { 
       viewModel.errors.showAllMessages(); 
       return false; 
      } else { 
       //DO SOMETHING 
       this.SomeCollection.push(newInterviewee); 
       this.FirstName(null); 
       } 
     }, 

我已經中HTML如下:

<div> 
<label>First Name</label> 
<input data-bind="value: FirstName, validationElement: FirstName, valueUpdate: 'keyup'" class="input" type="text"> 
</div> 
<div> 
<div> 
<input data-bind="click: addItem" class="button" type="button"> 
</div> 

的問題是,當我打電話this.FirstName(空)。錯誤馬上顯示!我希望只有在財產清除後按下按鈕時纔會顯示錯誤

回答

0

我們在項目中遇到同樣的問題。我們通過強制isValid爲true來解決這個問題。

addItem: function() { 
      if (!viewModel.isValid()) { 
       viewModel.errors.showAllMessages(); 
       return false; 
      } else { 
       //DO SOMETHING 
       this.SomeCollection.push(newInterviewee); 
       this.FirstName(null); 
       viewModel.isValid(true); 
      } 
     }, 

爲了能夠做到這一點,你需要重寫ko.validation的定義計算和isValid如下:

observable.isValid = ko.computed({ 
    read: function() { 
     return observable.__valid__(); 
    }, 
     write: observable.__valid__ 
    } 
); 
+0

嗯。當我調用viewMOdel.isValid(true)時出現此錯誤;除非您指定'寫入'選項,否則無法將值寫入ko.computed。如果您想讀取當前值,請不要傳遞任何參數。 – jmogera

+0

isValid(true)如何爲你工作@Anzeo? – jmogera

+0

是的,我得到了同樣的問題,我不得不在我們的代碼中查找它,並且今天編輯我的答案 – thomaux