2014-05-09 31 views
1

由於Breeze Required驗證器工作不正常,我們希望將其替換爲我們自己的實現。對於這一點,我有這樣的TS碼之前驗證我的屬性,它被調用:爲什麼我的「必需」驗證器不能用registerFactory替換標準微風所需的驗證器?

breeze.Validator.registerFactory(
(ctx?: breeze.ValidatorFunctionContext) => 
    new breeze.Validator(
     'required', 
     (value: string, context: breeze.ValidatorFunctionContext) => { 
      if (context.hasOwnProperty('allowEmptyStrings') && !context['allowEmptyStrings'] && typeof value === 'string') { 
       return value != null && value.length > 0; 
      } 
      return value != null; 
     }, 
     ctx), 
'required'); 

當我跟蹤registerFactory方法,我看到的是可轉位性能所需的功能變更的實現。

__config.functionRegistry[fnName] = fn; 

現在,當我運行此代碼來驗證我的屬性:

this.isValid(this.entity.entityAspect.validateEntity()); 

我跟蹤代碼右邊的validate方法裏面微風:

function validate(aspect, validator, value, context) { 

所需的驗證是錯的一個,它的微風一個,不是我的?

這是怎麼回事?

回答

0

據我所知breeze文檔(see here)「registerFactory」只有當你加載以前導出的數據時才需要。它說:

我們認爲這是一個很好的做法,註冊您的自定義驗證程序,雖然你不必除非你會從服務器以外的序列化源獲取元數據。安全地玩;註冊他們。

「......你沒有,除非你會從一個序列化的源獲取元數據」指倒過來:工廠登記是在所有其他地方沒用。如果你看微風代碼行6922 ff。,函數addValidators(dataProperty):它不檢查函數註冊表。也許微風團隊的某個人可以更準確地解釋這一點。

最好的方法:創建自己的驗證器,然後手動添加到您的實體或屬性。

+0

謝謝您的回答。正如你在上面的代碼中看到的那樣,我們需要替換缺省的必需驗證器,因爲它不能正確處理allowemptystring,在微風代碼中存在一個錯誤。我會在答案中提供我們的解決方案... –

0

在行2320修改微風源代碼(1.4.11)說:而不是

​​

if (ctx && ctx.allowEmptyStrings) return true; 
相關問題