2

Knockout JS 内のオブザーバブルにアタッチされたすべてのエクステンダーとバインディングを表示することは可能ですか?

サンプル ビュー モデル:

var viewModel = function(){
  var self = this;

  self.firstName = ko.observable().extend({required: "Please enter a name",
                                           logChange: "first name" });

  self.lastName = ko.observable().extend({ required:true});

}

また、 KO Validation Pluginに加えて、 Knockout X-Editable Pluginを含むいくつかのカスタム bindingHandlers も使用しています。

複数ページ ビューの例:

  <!--Screen 1 -->
  <input data-bind="value:firstName"/>

   ....

  <!--Screen 2 -->
  <span data-bind="editable:firstName"></span>

A.self.firstName()すべてのエクステンダーのリストを照会して取得する方法はありますか?

{required: "Please enter a name", logChange: "first name" }

B. このオブザーバブルに依存するすべてのバインディング ハンドラーを取得するために実行できる別のクエリはありますか? これを DOM 要素として返すことはできますか?

基本的にはインポートしたデータの検証エラーを表示しようとしていますが、2番目のビューにいる場合は下に追加したいと思い<span data-bind="editable"/>ます。

これは、各入力を個別に検証する場合には十分に単純ですが、 を使用すると複雑になりko.validation.group(viewModel)ます。すべてのエラーを繰り返し処理しても、エラーをスローした元のオブザーバブルとそれらを関連付ける方法がわかりません。

4

1 に答える 1

1

使用できるカスタムバインディングがあります

<span data-bind="validationMessage: myObservable"></span>

それでも十分でない場合は、創造性を発揮する必要があります :D

オブザーバブル上のすべてのエクステンダーを確認する一般的な方法はありません。KO 検証は、使用できる拡張オブザーバブルにいくつかの関数とオブザーバブルを追加します

  • clearError
  • エラー
  • 有効です
  • 検証中です
  • ルール
  • setError

要素にアタッチされたすべてのバインディングを表示できるようにするには、カスタム バインディングを作成する必要があります。これは悪いことではなく、ViewModel から View への依存関係を持つことは悪い習慣です。カスタムバインディングのinitまたはupdate関数から、allBindingsAccessorがあります

ko.bindingHandlers.myBinding = {
    init: function(element, accessor, allBindingsAccessor) {
       var valueAttachedToCheckedBinding = ko.utils.unwrapObservable(allBindingsAccessor().checked);
    }
}
于 2013-06-13T10:33:21.887 に答える