breezejs能否在属性更改而不是保存时验证新创建的实体

breezejs能否在属性更改而不是保存时验证新创建的实体,breeze,Breeze,从breezejs手册:“Breeze自动验证缓存中的实体。对于分离的实体,它不会这样做。例如,新创建的客户在技术上是无效的,因为其CompanyName为null,并且该属性是必需的。在将客户添加到缓存之前,Breeze不会验证该客户。这使您有时间在新实体进入缓存并触发验证之前设置其值。” 我的问题是在上述背景下提出的: 当要创建新实体并按下保存按钮时,web上浮动的关于breezejs和validation的示例始终显示validation 当我从一个输入字段输入100个字符(允许输入10个

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

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

当要创建新实体并按下保存按钮时,web上浮动的关于breezejs和validation的示例始终显示validation

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


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

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

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

if (!newCustomer.entityAspect.validateProperty("CompanyName")) {
       /* do something about errors */} 
我从以下方面得到了这些例子:


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

默认情况下会将实体添加到缓存中。当您创建实体时,可以显式地将其
entityState
设置为
Distached
或任何其他状态(如果您愿意)。(
entityManager.createEntity('entityType',null,breeze.entityState.Distached)

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

订阅属性更改并手动验证
(下面的代码结合了breeze示例)

有关更多帮助和示例,请参见以下链接:




当我有一个创建客户公式时,所有这些属性验证/subscibe是否也起作用。我的意思是客户实体还不存在,因此我如何在其上执行propertyChanged.subscribe?只要在entityManager上调用createEntity函数,您就有了一个完整的实体,您可以在其上进行订阅和验证。一切都是一个“实体“无论其实体状态如何,或者是否已保存到基础数据库。当您向用户提供创建记录/实体的表单时,请调用
createEntity
,然后将返回的实体绑定到视图模型。
// 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.
    }

});