asp.net-mvc-3 - 使用 onlyIf 进行验证不起作用

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

我在尝试执行以下操作时遇到了问题:

newNoteText: ko.observable().extend({ required: { onlyIf: function () { return this.ShowNote == true } } })

我注意到这不起作用,但是当我像这样把代码放回去时,它工作得很好:

newNoteText: ko.observable().extend({ required: true })

http://sdrv.ms/WJC3fS

https://skydrive.live.com/redir?resid=33048714B5BF3B4B!2027

最佳答案

使用 onlyIf 的正确语法规则上的选项是:

newNoteText: ko.observable().extend({ 
  required: {
    onlyIf: function(){
      return someFlagIsTrue;
    }
  }

比照。 this answer回答您之前的问题之一(作者:Eric Barnard,Knockout Validation 的主要贡献者)。


关于您的代码,除了 Knockout Validation 的语法之外,还有两件事需要担心:

  1. return something == truereturn something 相同(不提及 JavaScript 处理 ===== 运算符的方式,请参阅有关此 here 的更多信息)。

  2. 在您的函数中,this 的值并不是你想象的那样(这里指的是 extend() 括号之间的参数)。

如果您想访问 View 模型的其他可观察量之一的值,您应该执行以下操作:

newNoteText: ko.observable().extend({ 
  required: {
    onlyIf: function(){
      return self.ShowNote();
    }
  }

self 在 View 模型构造函数的顶部定义,例如 var self = this; 。查看有关此模式的更多信息 here .

关于asp.net-mvc-3 - 使用 onlyIf 进行验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14990033/

相关文章:

asp.net-mvc - 如何对 MVC 传递的每个项目列表的属性应用 knockout 验证?

javascript - Knockout.js 验证文本框突出显示

jquery - 使用 ASP.Net MVC 3/jQuery ajax 传递的列表为空

asp.net-mvc-3 - MVC3 Controller 无法识别具有 Ninject 依赖项的基本 Controller

jQuery DataTables 弄乱了 IE8 中的 CSS 网格,如何修复?

node.js - 构建 Knockout.js 时出现 fatal error

jquery-ui - knockoutjs 提交绑定(bind)未正确处理输入键

asp.net-mvc - 列表回发时绑定(bind)困难

javascript - 在 Knockout.js 中连接 AJAX 调用

javascript - 可重复使用的属性验证与 knockout