2013-11-28 46 views
0

讓我們說我們有一個簡單的實體層面的驗證這樣的:調用getValidationErrors()與angularjs NG重複breezejs實體驗證導致錯誤

function entityIdIsValidFn(entity,context) { 
    if (entity.Id1) 
     return true; 

    if (entity.Id2) 
     return true; 

    return false; 

} 

var entityIdValidator = new breeze.Validator("entityIdValidator", entityIdIsValidFn, { messageTemplate: "Id1 or Id2 must be defined" }); 
var entityType = manager.metadataStore.getEntityType("Entity"); 
entityType.validators.push(entityIdValidator); 

現在,如果我嘗試在angularjs視圖中顯示驗證錯誤消息像這樣:

<div ng-repeat="error in selectedEntity.entityAspect.getValidationErrors() " class="alert alert-danger">{{error.errorMessage}}</div> 

我得到了一堆錯誤:達到了$ 10 digest()迭代。中止!錯誤。

如果我有驗證器只附加到屬性驗證錯誤將顯示得很好,但一旦我將驗證器附加到實體類型我遇到了麻煩。有人知道爲什麼發生這種情況,因此如何正確顯示驗證錯誤信息?

任何幫助將不勝感激。

回答

1

雖然我沒有得到你的錯誤,但我沒有任何問題重現我自己的錯誤。在getValidationErrors(breeze.debug.js v.1.4.6的3839行)中存在一個Breeze錯誤,它在錯誤集合上迭代,測試屬性名稱。

ve.property.name === propertyName 

一個實體級別驗證錯誤(ve)不具有一個屬性,因此,代碼失敗,空引用錯誤而試圖訪問未定義property.name

暫時的解決辦法可能是修補此行與

ve.property && ve.property.name === propertyName 

我們已經在GitHub上固定它。它將出現在下一個(1.4.7)版本中。感謝您報告它。