0

次のような他のものを集約するカスタム バインディングがある場合:

ko.bindingHandlers.binding1 = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        var ctx = ko.utils.unwrapObservable(valueAccessor());

        ko.applyBindingsToNode(element, { 'binding2': ctx });        
        ko.applyBindingsToNode(element, { 'binding3': ctx });        
    }
};

「allBindingsAccessor」は、init 関数で現在のバインディングのみを返しています。

binding2 の「init」関数で binding1 と binding2 を返し、binding3 の「init」関数で binding1、2、および 3 を返すことを期待していました。

次のフィドルは、私が言及した動作を示しています。 http://jsfiddle.net/J3sjq/5/

問題は、私の binding3 が、たとえば binding2 のような他のバインディングの存在に依存していることです。

その動作を実装する最良の方法は何ですか? 他のバインディングの存在を通知するためにコンテキストを変更することを考えていましたが、ハックのように少し聞こえました。

前もって感謝します。

編集:

元の問題をより多く表示するようにフィドルを更新しました。単純化しようとしましたが、やりすぎた可能性があります。

http://jsfiddle.net/J3sjq/6/

新しいフィドルでは、binding1 は initFieldStatus に置き換えられ、それぞれが入力フィールドのステータスを計算する 3 つの他の複雑なバインディングを初期化します。 isInputAtWarning バインディングは、要素で宣言された他のバインディングに依存します。

うまくいけば、これで質問が明確になります。

ありがとうございました。

編集2:

私が実装しようとしているもののより現実的な例をフィドルに提供しました。

http://jsfiddle.net/J3sjq/8/

4

1 に答える 1