0

これは、理想的にはプロパティにバインドできる必要があるが、そのプロパティがルート ビュー モデル内のどこにあるかを知ることができる必要がある、非常にニッチなシナリオです。

たとえば、次のオブジェクトがあるとします。

{
   id: ko.observable(1),
   name: ko.observable("some user"),
   groups: [
      { id: ko.observable(1), name: ko.observable("some group") },
      { id: ko.observable(2), name: ko.observable("some group") },
   ]
}

ここでの問題は、次のようなバインディングがある場合です。

<div>
<!-- ko foreach: groups -->
    <input data-bind="value: name, custom-binding: { property: name, other: foo }" />
<!-- /ko -->
</div>

今、私はただ反対するためnameにここで解決できる必要があります. 現在、プロパティが値を見るだけであることをバインディングで知る方法はないと思うので、これを文字列として渡すか、バインディングが見えるオブジェクトにカスタム属性を持たせる必要があるかもしれません為に。いずれにせよ、バインディングのスコープ内で (そのスコープに適用された rootModel に関連して) 各オブザーバブルのプロパティ パスを何らかの形で取得できる必要があります。rootModel.groups[currentIndex].namename"name"

私はそれが狂っているように見えることを知っています. foreach は、子バインディング スコープが変更されてラップされるシナリオの 1 つにすぎないため、すべてのシナリオでproperty-path、このカスタム バインディングで使用される for プロパティを構築できる必要があります。

これを行う方法はありますか?

4

1 に答える 1

0

これを行う簡単な方法はないように思えたので、特定のバインディング用のプリプロセッサを記述してスコープをキャッシュし、それを実行時に新しいバインディングとして適用する必要がありました (プリ プロセッサはバインディング コンテキストにアクセスできないため)。

次に、実際のバインディングではプロキシされ、既存のスコープを持つ親が存在する場合はルックアップし、ローカル プロパティが追加され、バインディング コンテキストでの子ルックアップのためにキャッシュされます。

これは次の場所で使用されています。

https://github.com/grofit/treacherous

それで、そこでどのように行われたかを自由に見てください。より良い解決策があれば教えてください:)

于 2016-04-04T12:22:30.143 に答える