3

私がこれを持っているとしましょう:

<div data-bind="enable: false">
    <div data-bind="someCustomBinding: myValue"></div>
</div>

カスタム バインディング内から親コンテナーの「有効化」バインディングにアクセスすることは可能ですか?

== 明確化: ==

カスタム バインディングでは、valueAssessor を使用して現在のバインディング値にアクセスできます。また、allBindings を介して他のバインディングにアクセスしたり、bindingContext を介してさまざまな関連コンテキストの値にアクセスしたりすることもできます。

カスタムバインディング内から親html要素のバインディングにアクセスできるかどうか疑問に思っていました(valueAccessorと同様の方法で)

このようなもの(sudoコード):

ko.bindingHandlers.someCustomBinding=
{
    init: (element, valueAccessor, allBindings) =>
    {
        var parentIsEnabled = 
             ko.GetContextFor($(element).parent()).get('enable');
    }
}
4

2 に答える 2

8

親ノードにアクセスして、そのdata-bind属性を解析できます。

JSON.parse('{' + $(element).parent().data("bind") + '}')

次のように、バインディング定義に 二重引用符 (") を入れることに注意してください。jsFiddle

悲しいことに、私はそれを行うためのよりエレガントな方法を見つけることができません.

dataForKO では/を使用して dom 要素のビューモデルにアクセスできますが、dom 要素contextForのバインディング定義を取得する方法は見当たりません。

編集: さらに調査した後、次のようにバインドされている親にアクセスできます。

ko.bindingProvider.instance.getBindings($(element).parent().get(0), bindingContext)

バインディングを含むオブジェクトを返します。たとえば、 a を宣言するdata-bind="style: { backgroundColor: myBackgroundColor }"と、オブザーバブルにアクセスできるようになりますko.bindingProvider.instance.getBindings($(element).parent().get(0), bindingContext).style.backgroundColor

唯一の問題は、viewmodel 内で観測可能な名前を取得できないことです (または、ノックアウト オブザーバブルを比較するためのイディオムのように、各プロパティをビューモデルと比較する場合を除いて、少なくとも方法はわかりません)

于 2014-04-17T13:13:03.593 に答える
0

はい。カスタム バインディングおよび関数のbindingContextパラメーターは、およびへのアクセスを公開します。 initupdate$parent$parents$root

于 2014-04-16T15:20:33.337 に答える