【问题标题】:Knockout Validation & Proper way to clear controls淘汰赛验证和清除控制的正确方法
【发布时间】:2012-12-24 09:28:15
【问题描述】:

我有以下代码,它可以正常工作,除了,当您在插入项目后清除属性时。错误立即出现。

ko.validation.configure({
        insertMessages: false,
        decorateElement: true,
        errorElementClass: 'error'
    });

FirstName: ko.observable().extend({
            required: true
        }),

我在淘汰视图模型中添加了方法

addItem: function () {
            if (!viewModel.isValid()) {
                viewModel.errors.showAllMessages();
                return false;
            } else {
                //DO SOMETHING
                this.SomeCollection.push(newInterviewee);
                this.FirstName(null);
                }
        },

我在 HTML 中有以下内容:

<div>
<label>First Name</label>
<input data-bind="value: FirstName, validationElement: FirstName, valueUpdate: 'keyup'" class="input" type="text">
</div>
<div>
<div>
<input data-bind="click: addItem" class="button" type="button">
</div>

问题是在我调用 this.FirstName(null) 之后。错误立即出现!我希望只有在清除属性后按下按钮时才会显示错误

【问题讨论】:

    标签: asp.net-mvc-3 knockout.js knockout-validation


    【解决方案1】:

    这是 Steve Greatrex 提供的解决方案:https://github.com/Knockout-Contrib/Knockout-Validation/issues/210

    【讨论】:

      【解决方案2】:

      我们的项目也遇到了同样的问题。我们通过强制 isValid 为 true 解决了这个问题。

      addItem: function () {
                  if (!viewModel.isValid()) {
                      viewModel.errors.showAllMessages();
                      return false;
                  } else {
                      //DO SOMETHING
                      this.SomeCollection.push(newInterviewee);
                      this.FirstName(null);
                      viewModel.isValid(true);
                  }
              },
      

      要做到这一点,您需要覆盖 ko.validation 对 isValid 的定义,计算如下:

      observable.isValid = ko.computed({
          read: function() {
              return observable.__valid__();
          },
              write: observable.__valid__
          }
      );
      

      【讨论】:

      • 嗯。当我调用 viewMODEl.isValid(true); 时出现此错误;除非您指定“写入”选项,否则无法将值写入 ko.computed。如果您想读取当前值,请不要传递任何参数。
      • 是的,我遇到了同样的问题,我必须在我们的代码中查找它并在今天编辑我的答案
      • 我看到您找到了更好的解决方案。我们的方法是覆盖 isValid 以包含一个 write 语句。我已经在我的答案中添加了这个
      • 是的,我只是直接找到源头并要求提供适当的解决方案。这些人非常有帮助。
      猜你喜欢
      • 2014-06-19
      • 2012-02-18
      • 1970-01-01
      • 2012-03-08
      • 2015-02-03
      • 2011-08-09
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      相关资源
      最近更新 更多