2

やろうとすると問題が発生します:

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

4

2 に答える 2

4

onlyIfルールでオプションを使用するための適切な構文は次のとおりです。

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

Cf. 以前の質問の1つに対するこの回答(KnockoutValidationの主な寄稿者であるEricBarnardによる)。


コードに関しては、Knockout Validationの構文とは別に、次の2つの点について心配する必要があります。

  1. return something == trueと同じですreturn something(JavaScriptの処理方法=====演算子については触れていません。これについて詳しくは、こちらをご覧ください)。

  2. 関数では、の値はthisあなたが思っているものではありません(ここでは、の括弧の間のパラメーターを参照していますextend())。

ビューモデルの他のオブザーバブルの1つの値にアクセスする場合は、次のようにする必要があります。

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

自己がビューモデルコンストラクターの上部で定義されている場合(のように)var self = this;。このパターンの詳細については、こちらをご覧ください

于 2013-02-23T17:04:01.270 に答える
0

ThibWeb で言及されている params オプションは必要ありません。knockout.validation.js は addExtender メソッドでこれをデフォルトで true に設定します。

if (params.message || params.onlyIf) { 
  return ko.validation.addRule(observable, {
    rule: ruleName,
    message: params.message,
    params: utils.isEmptyVal(params.params) ? true : params.params,
    condition: params.onlyIf
 });

Eric Barnard の回答は 2011 年で、おそらくこれがデフォルトで true になる前でした。

ただし、コードで検証のデフォルトを設定している場合は、HTML5 の必須属性を HTML に書き込んでいるか、HTML で設定されている属性を読み取っている可能性があります。

ko.validation.configure({
    parseInputAttributes: true, //default is false
    writeInputAttributes: true //default is false
});

常に適用される追加の必須ルールを追加しているため、これにより onlyIf 必須条件が事実上無視されることがわかりました。

于 2013-11-07T15:59:39.403 に答える