【问题标题】:Async validation with Ko.validation and Ko.mapping使用 Ko.validation 和 Ko.mapping 进行异步验证
【发布时间】:2015-10-18 11:03:25
【问题描述】:

我正在使用 ko.validation 和 ko.mapping 在表格中显示一些数据。可以编辑此数据或将更多数据添加到表中。

见小提琴:http://fiddle.jshell.net/juandozco/v9L69g8a/5/

我正在重用表单来编辑或创建这些项目。我的问题是,项目中的某些属性无法编辑,所以我在编辑模式下隐藏了这些属性,但验证仍然发生并且不会让表单继续。

我尝试了 3 种不同的方法,请参见以下行:

1、90 和 112 在我的小提琴的 javascript 部分中

我怎样才能实现这个验证?

【问题讨论】:

  • 如果你隐藏并且不需要编辑Username 为什么你首先要扩展它。请澄清
  • 我正在扩展它,因为我使用相同的表单来编辑和插入。我需要在插入新项目时对其进行验证。
  • 这应该可以工作 self.User().userName.extend({ validatable: false }); 保持在 self.edit 函数的开头
  • 它工作,有点。它似乎正在关闭该验证和所有其他验证。如果我将其设置回 true,它不会恢复正常
  • 我认为insertMessages:true 存在问题,我们可以通过validationMessage 在这里选择不同的方式来处理这张支票@在这里查看fiddle.jshell.net/v9L69g8a/8

标签: asynchronous knockout.js knockout-mapping-plugin knockout-validation


【解决方案1】:

你需要skip编辑部分的验证,所以你需要在你的observable上添加像validatable: false这样的扩展器。

代码:

self.edit = function (user) {
    self.User().userName.extend({ validatable: false }); // Key here
    self.editing(true);
    ............
    self.User().userName(user.userName());
};

工作示例here

【讨论】:

  • 我们还将ko.validation.init 选项中的insertMessages 设置为false,并将data-bind 设置为validationMessage 的自定义<span> 添加到每个验证以显示验证消息。
猜你喜欢
  • 2013-02-12
  • 2019-09-12
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 2014-11-26
  • 2018-06-17
  • 2017-01-17
相关资源
最近更新 更多