2017-11-25 175 views
0

我在模型和表單上使用了ember-cp-validation。我希望驗證只有在滿足某些條件時纔有效。就像當一條路徑處於活動狀態時,或者某個組件在特定環境中使用時一樣。ember-cp驗證條件驗證程序

爲了說明,我有一個基本的email模型,對模型本身進行了典型的驗證。如果在用戶帳戶的上下文中使用該模型,我希望啓用額外的驗證程序(驗證程序username-exists,用於判斷他們是否嘗試將其電子郵件地址更新爲存在於另一帳戶中的電子郵件地址)。

我的電子郵件地址模式:

import DS from 'ember-data'; 
import { validator, buildValidations } from 'ember-cp-validations'; 

const { attr } = DS; 

const Validations = buildValidations({ 
    email: { 
     validators: [ 
      validator('presence', { presence: true, description: 'E-Mail'}), 
      validator('format', { 
       type: 'email' 
      }), 
      validator('length', { 
       max: 200, 
      }) 
     ] 
    }, 
}); 

export default DS.Model.extend(Validations, { 
    email: attr('string'), 
    optin: attr('boolean', { defaultValue: false }) 
}); 

我已經有一個用戶名,存在自定義的驗證。我只是不知道如何添加驗證有條件地

最簡單的解決方案是將驗證與disabled選項相加,除非滿足條件,否則將禁用該選項。

validator('username-available', { 
    debounce: 300, 
    disabled: computed.bool(what is the dependent key??) 
}) 

但我不知道依賴關鍵是什麼。我不認爲模型定義中的路線名稱可用。

或者我應該添加條件驗證器到組件本身?有沒有辦法將一個驗證器追加到組件js的validators數組?

我想我可能失去了一些東西明顯;)

+0

嗯,只驗證你的模型只在需要時,登錄我猜。 – Cezary

回答

1

我花了一段時間來挖那個漲得時候我一直在尋找它。這裏是我有什麼(安裝略有不同,但應該讓你去):

email: { 
    disabled: Ember.computed.not('model.attributeInQuestion'), 
    validators: [ 
    ], 
    }