2016-11-23 84 views
0

我正在使用ember-cli:2.5.0和ember-validation:v2.0.0-alpha.5 在我的餘燼組件中,我有一個自動運行的驗證每個屬性的變化,但我想運行此驗證,只有當我在技術術語調用驗證懶惰地調用「驗證()」方法。Ember驗證如何實現延遲驗證

請找到下面的代碼樣本,

import Ember from 'ember'; 
import EmberValidations, { validator } from 'ember-validations'; 

export default Ember.Component.extend(EmberValidations, { 

didReceiveAttrs() { 
    this.set('newBook', this._bookModel().create()); 
}, 

_bookModel(data = {}) { 
return Ember.Object.extend(EmberValidations, { 
    bookVersion: null, 
    isEditable: false, 
    validationActive: false, 
    validations: { 
    bookVersion: { 
     inline: validator(function() { 
if(this.validationActive){ //Here this.validationActive always return undefined 
     var version = this.model.get('bookVersion') || "", 
      message = []; 

     if (Ember.isEmpty(bookVersion)) { 
      message.push("Book Version is mandatory!!!"); 
     } 

     if (message.length > 0) { 
      return message.join(','); 
     } 
     } 
     }) 
    } 
    } 
}, data); 
} 

}); 

actions: { 
     this.get('newBook').set("validationActive",true); 
     this.get('newBook').validate().then(() => { 
      //Do the action 
     } 
} 

我想上面的驗證,只能運行調用 「this.get( 'newBook')。驗證()」。我完全不熟悉如何貶低投票人,請在您投票之前先將您的意見投給其他人,然後請其他代碼示例讓我知道。

你的幫助應該是可觀的。

回答

1

您用於驗證的插件(「ember-validationations」)是非常流行的插件,與其他文檔相比,它的文檔相當不錯。如果您查看文檔,則在documentation中有一個名爲「Conditional Validators」的部分。您可以使用布爾屬性來控制何時執行驗證。

您可以在以下twiddle中看到我的意思。我在應用程序控制器中爲用戶名稱創建了一個簡單的驗證。名稱字段的長度必須至少爲5,並且只有在條件validationActive爲真時才執行驗證。原來;條件是錯誤的;這意味着驗證器不起作用並且控制器的屬性isValid(從EmberValidations Mixin繼承)屬性爲true。如果您使用提供的按鈕切換屬性,驗證將運行(因爲條件現在設置爲true;因此驗證被觸發)並且isValid將返回false。如果你改變了這個值;驗證結果將根據用戶名稱的值進行適當更改。如果再次切換條件將其設置爲false;那麼isValid將成爲真實的,無論用戶名是什麼。

我希望這可以讓您瞭解如何控制何時驗證應該起作用。

以下是編輯後應該執行的操作:該字段未定義,因爲您正試圖在內聯驗證器中訪問組件自己的validationActive字段。請獲得validationActive如下this.model.get('validationActive')並試一試。它應該工作。

+0

我不能關聯你的答案和我的問題,因爲我使用內聯驗證器抱歉我的錯誤理解。我沒有找到任何有關條件內聯驗證器的文檔,而是我可以找到條件驗證。我根據你的回答更新了我的問題,但是我總是在if條件中得到「未定義」。請糾正我並幫助我脫離這種情況。 – VelNaga

+0

請參閱我已更新的關於您的編輯的部分。 – alptugd

+0

@alptugx它像一個魅力工作,非常感謝您的幫助。我還有一個查詢,你知道如何清除這些驗證錯誤? – VelNaga