【问题标题】:Add new item to validatedObservable in knockout添加新项目以在淘汰赛中验证 Observable
【发布时间】:2015-05-06 21:43:39
【问题描述】:

假设我有一个经过验证的 observable,并且里面有一个扩展的 observable。 这很好用。

  var validationModel = ko.validatedObservable([
    model.text1.extend({required: true})
  ]);

如果我随后添加到此已验证的Observable 的数组中,我希望它现在知道新的验证,但事实并非如此。

  validationModel().push(
    model.text2.extend({required: true})
  );

是否可以在不重新初始化验证模型的情况下将验证扩展到新的可观察对象?

我尝试使用model.text2.notifySubscribers(),并且触发了验证消息中的这种工作。但是 isValid() 仍然显示为 true。

这是一个显示我在说什么的工作示例:

http://liveweave.com/MBq7XU

【问题讨论】:

    标签: knockout.js knockout-validation


    【解决方案1】:

    我一直在寻找源代码,我能看到的唯一方法是传入一个新数组。鉴于我想要添加到旧数组中,这是我能想到的最优雅的事情。

      validationModel(ko.utils.arrayPushAll(validationModel(),
        [model.text2.extend({required: true})]
      ));
    

    http://liveweave.com/sUxgeO


    不工作?

    原来我使用的是旧版本的验证(来自 nuget)。这个版本以不同的方式实现了validatedObservable,这会产生一些副作用。

    因此,我最终不得不使用此代码来实现我所需要的。

    kovalidation.pushValidation = function (validatedObservable, itemsArray)
    {
       var newValidatables = ko.utils.arrayPushAll(validatedObservable(), itemsArray);
       validatedObservable(newValidatables);
       validatedObservable.errors = kovalidation.group(newValidatables);
    };
    

    可以这样使用:

      kovalidation.pushValidation(validationModel,
        [model.text2.extend({required: true})]
      ));
    

    【讨论】:

      【解决方案2】:

      经过更广泛的调查,我认为我之前的回答并不完全正确,因为它忽略了validatedObservable 中的基础订阅。

      因此,我得出的结论是,最好建立一个数组,然后仅在拥有一切时才初始化 ko.validatedObservable([..wholearray..])

      如果您真的必须添加到已经存在的validatedObservable,我认为您唯一的选择是拉出数组然后重新初始化它。

      var validationModel = ko.validatedObservable([...])
      var underlyingArray = validationModel();
      underlyingArray.concat([...]);
      validationModel = new ko.observable(underlyingArray);
      

      【讨论】:

        猜你喜欢
        • 2015-06-05
        • 1970-01-01
        • 2018-03-12
        • 2013-04-10
        • 2012-02-18
        • 2013-10-14
        • 2011-08-09
        • 2012-11-04
        • 1970-01-01
        相关资源
        最近更新 更多