2016-01-21 35 views
0

所以我試圖獲得一些驗證,以便使用基因敲除驗證。我創造了這個小提琴來證明我的問題:https://jsfiddle.net/utjmLhxa/7/重新評估依賴字段上的錯誤消息,並進行基因敲除驗證

當我改變「數量」和我已經有「雙量」的錯誤信息,我想它更新的錯誤消息。驗證有效時它似乎消失,但如果它仍然無效,它不會更新。

是否有可能獲得基因敲除驗證來重新評估文本?如果是這樣,怎麼樣?它似乎做了一些重新評估,因爲錯誤消失時,該字段是有效的。

實施例:

  1. 在數量輸入2
  2. 在雙人量輸入2,示出了錯誤,它必須是至少4
  3. 在數量輸入3,對於雙數量錯誤消息仍然是在數量 相同
  4. 輸入1,用於雙人量錯誤信息消失

下面是代碼的jsfiddle:

<div id="vm"> 
    <span>Quantity</span> 
    <input type="number" data-bind="value: quantity"/><br/> 
    <span>Double quantity</span> 
    <input type="text" data-bind="value: doubleQuantity"/> 
</div> 

ko.validation.registerExtenders(); 
var Vm = function(){ 
    var self = this; 
    self.quantity = ko.observable().extend({ max: 5 }); 
    self.doubleQuantity = ko.observable().extend({validation: { 
       validator: function (val) { 
        this.message = 'must be at least ' + self.quantity() * 2 
        return val >= 2 * self.quantity(); 
       }, 
       message: '' 
      } }); 
}; 
ko.applyBindings(new Vm(), document.getElementById('vm')); 

使用https://knockoutjs.com/downloads/knockout-2.2.1.jshttps://cdnjs.cloudflare.com/ajax/libs/knockout-validation/1.0.2/knockout.validation.min.js

+0

你需要使用這些過時的庫? –

+0

我認爲這將有助於:http://stackoverflow.com/questions/17582154/knockout-validation-message-based-set-in-the-validation-function –

回答

2

它看起來像錯誤消息,如果相關字段修改沒有更新(試過,但無法管理,使其工作)。

一個解決辦法是在其上觸發doubleQuantity進行重新評估,模擬值已通過對觀察到每當dependent變化呼喚valueHasMutated改變。添加以下里面,在你的虛擬機的結尾:

self.quantity.subscribe(function(){ 
    self.doubleQuantity.valueHasMutated(); 
}); 

工作fiddle

+0

我實際上試圖解決它完全是這樣的,但我沒有意識到valueHasMutated()函數。謝謝! – Markus