1
  1. 剣道 MVVM にバインドされている入力要素の変数リストを作成します。
  2. すべての入力要素に対して剣道検証を実行し (これは標準機能です)、入力が空かどうかをチェックします。
  3. 私の MVVM のオブジェクトには、次のように属性 IsMandatory があります。

    { Name: "test", ID: 12, ... , IsMandatory: false }

  4. 検証では、IsMandatory 値が false の要素を検証しようとしてはなりません。どうすればこれを達成できますか?

次のように、属性を MVVM 値にバインドできることを知っています。

<input data-bind="attr: { name: Name }" />

上記のオブジェクトの実際の出力は次のようになります。

<input name="test" />

ただし、required標準の必須検証に使用される属性は、このように値がありません。

<input name="test" required />

したがって、基本的に、MVVM オブジェクトの IsMandatory 属性が true に設定されている場合は必須属性を持つ要素を作成し、false に設定されている場合は必須属性を持たない要素を作成する必要があります。

{ Name: "test1", ID: 1, ... , IsMandatory: true }
{ Name: "test2", ID: 2, ... , IsMandatory: false }
{ Name: "test3", ID: 3, ... , IsMandatory: true }

<input name="test1" required />
<input name="test2" />
<input name="test3" required />

この問題に対するエレガントな解決策はありますか? 各要素の作成の周りに if-else を配置する以外。または、検証で要素を除外/含める別のソリューションはありますか?

私が想像できる 1 つのオプションは、カスタムの必須検証を作成し、入力の IsMandatory 属性が true に設定されているかどうかを確認してから、要素を検証することです。ただし、現在の要素の MVVM オブジェクトを取得する可能性はありませんでした。

...
validation: {
    required: function (input) {
        var observable = // Get the kendo observable from input here !!!!!
        if (observable.IsMandatory) {
            return input.val() != "";
        }
        return true;
    }
},
...
4

1 に答える 1

2

これは、カスタム バインディングとして実装できます。

kendo.data.binders.required = kendo.data.Binder.extend({
  refresh: function() {
    var required = this.bindings.required.get();
    if (required) {
      this.element.setAttribute("required", "required");
    } else {
      this.element.removeAttribute("required");
    }
  }
});

これがライブデモです: http://jsbin.com/atozib/1/edit

于 2013-04-11T11:40:45.263 に答える