使用angularjs ng-repeat中的breezejs实体验证调用getValidationErrors()会导致错误

时间:2013-11-28 09:02:23

标签: angularjs breeze

假设我们有一个简单的实体级验证器:

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()迭代。中止!错误。

如果我有验证器只附加到属性验证错误将显示正常但是一旦我将avalidator附加到实体类型我遇到了麻烦。任何人都知道为什么会发生这种情况,从而如何正确显示验证错误消息?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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)版本中。感谢您报告。