breezejs能否在属性更改而不是保存时验证新创建的实体
从breezejs手册:“Breeze自动验证缓存中的实体。对于分离的实体,它不会这样做。例如,新创建的客户在技术上是无效的,因为其CompanyName为null,并且该属性是必需的。在将客户添加到缓存之前,Breeze不会验证该客户。这使您有时间在新实体进入缓存并触发验证之前设置其值。” 我的问题是在上述背景下提出的: 当要创建新实体并按下保存按钮时,web上浮动的关于breezejs和validation的示例始终显示validation 当我从一个输入字段输入100个字符(允许输入10个字符)并在下一个输入字段输入制表符时,breezejs是否也可以验证属性更改?我只想在每个属性更改上显示我的验证错误消息,而不是在用户点击“保存更改”按钮时显示breezejs能否在属性更改而不是保存时验证新创建的实体,breeze,Breeze,从breezejs手册:“Breeze自动验证缓存中的实体。对于分离的实体,它不会这样做。例如,新创建的客户在技术上是无效的,因为其CompanyName为null,并且该属性是必需的。在将客户添加到缓存之前,Breeze不会验证该客户。这使您有时间在新实体进入缓存并触发验证之前设置其值。” 我的问题是在上述背景下提出的: 当要创建新实体并按下保存按钮时,web上浮动的关于breezejs和validation的示例始终显示validation 当我从一个输入字段输入100个字符(允许输入10个
或者这对新创建的实体不起作用,因为它尚未添加到缓存中?这只对已编辑的实体起作用吗?我认为这是可能的,您可以进行手动验证
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.
}
});