来自breezejs手册:“Breeze自动验证缓存中的实体。对于分离的实体,它不会这样做。例如,新创建的Customer在技术上无效,因为其CompanyName为null并且该属性是必需的.Breeze不会验证客户,直到将其添加到缓存中。这使您有时间在新实体进入缓存并触发验证之前设置它们的值。“
我的问题是在上述背景下:
在网络中浮动的关于breezejs和验证的示例总是在创建新实体并按下SAVE按钮时显示验证。
当我从一个输入字段选项卡输入100个字符(允许10个字符)并选项卡到下一个输入字段时,breezejs是否也可以验证属性更改?我只是想在每个属性更改时显示我的验证错误消息,而不是当用户点击保存更改按钮时。
或者这对新创建的实体不起作用,因为它尚未添加到缓存中?这只适用于编辑的网友吗?
答案 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
获得了这些示例我希望这会对你有所帮助。