【问题标题】:Can breezejs validate a newly created entity on property change NOT on SAVE微风js可以在属性更改而不是保存时验证新创建的实体吗
【发布时间】:2013-04-22 03:15:31
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: breeze


    【解决方案1】:

    默认情况下将实体添加到缓存中。创建实体时,您可以将其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

    【讨论】:

    • 当我有一个创建客户公式时,所有这些属性验证/订阅是否也有效。我的意思是客户实体还不存在,那么我该如何对其进行 propertyChanged.subscribe 呢?
    • 只要您在 entityManager 上调用 createEntity 函数,您就有了一个完整的实体,您可以订阅和验证。无论其 entityState 或是否已保存到底层数据库,一切都是“实体”。当您给用户一个表单来创建一个记录/实体时,您调用 createEntity 然后将返回的实体绑定到您的视图模型。
    【解决方案2】:

    我觉得可以,可以手动验证一下。

    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

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      • 2012-02-22
      相关资源
      最近更新 更多