breezejs可以在SAVE上的属性更改中验证新创建的实体

时间:2013-04-28 10:35:01

标签: breeze

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

我的问题是在上述背景下:

在网络中浮动的关于breezejs和验证的示例总是在创建新实体并按下SAVE按钮时显示验证。

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

或者这对新创建的实体不起作用,因为它尚未添加到缓存中?这只适用于编辑的网友吗?

2 个答案:

答案 0 :(得分:4)

默认情况下,实体会添加到缓存中。在创建实体时,您可以根据需要将其entityState显式设置为Detached或任何其他状态。 (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.
    }

});

有关更多帮助和示例,请参阅以下链接:
Subscribing to the propertyChanged event
Manually validating a property
Creating a new entity

答案 1 :(得分: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

获得了这些示例

我希望这会对你有所帮助。