4

来自breathjs手册:“Breeze自动验证缓存中的实体。它不会为分离的实体这样做。例如,新创建的客户在技术上是无效的,因为它的CompanyName为null并且该属性是必需的。Breeze不验证客户直到您将其添加到缓存中。这使您有时间在新实体进入缓存并触发验证之前设置其值。”

我的问题是在上述情况下:

当一个新实体即将被创建并按下 SAVE 按钮时,漂浮在网络上的关于breathjs 和验证的示例总是显示验证。

当我从一个输入字段 Tab 输入 100 个字符(允许 10 个字符)并 Tab 到下一个输入字段时,breezejs 还可以验证属性更改吗?我只想在每个属性更改时显示我的验证错误消息,而不是在用户点击“保存更改”按钮时。

或者这不适用于新创建的实体,因为它尚未添加到缓存中?这仅适用于已编辑的实体吗?

4

2 回答 2

4

默认情况下将实体添加到缓存中。创建实体时,您可以根据需要将其显式设置entityStateDetached或任何其他状态。( entityManager.createEntity('entityType', null, breeze.EntityState.Detached))

至于验证,您可以随时手动验证处于任何状态的实体。如果您想在属性更改时检查验证,只需订阅该entityAspect.propertyChanged事件即可。该propertyChanged事件将使您能够访问实体本身、更改的属性的名称、旧值和新值。然后,您只需使用entity.entityAspect.validateProperty(propertyname)并处理结果来检查属性验证。

订阅属性更改并手动验证
(下面的代码来自微风示例)

// assume order is an order entity attached to an EntityManager.
order.entityAspect.propertyChanged.subscribe(
function (propertyChangedArgs) {
    // this code will be executed anytime a property value changes on the 'order' entity.
    var entity = propertyChangedArgs.entity; // Note: entity === order
    var propertyNameChanged = propertyChangedArgs.propertyName;
    var oldValue = propertyChangedArgs.oldValue;
    var newValue = propertyChangedArgs.newValue;

    if (!entity.entityAspect.validateProperty(propertyNameChanged)){
        //Property is not valid. Inform the user if needed.
    }

});

有关更多帮助和示例,请参阅以下链接:
订阅 propertyChanged 事件
手动验证属性
创建新实体

于 2013-04-29T15:36:50.960 回答
1

我认为这是可能的,您可以进行手动验证。

if (!newCustomer.entityAspect.validateEntity()) {/* do something about errors */}
You can also validate a specific property:

if (!newCustomer.entityAspect.validateProperty("CompanyName")) {
       /* do something about errors */} 

我从以下网址获得了这些示例:http ://www.breezejs.com/documentation/validation

我希望这能帮到您。

于 2013-04-28T19:27:24.983 回答