これは本当にニッチなシナリオです。理想的には、プロパティにバインディングを持つことができなければなりませんが、ビューモデル。ノックアウトのforeach/descendantバインディングのどこに観測可能なルートモデルがあるのかを知る
<div>
<!-- ko foreach: groups -->
<input data-bind="value: name, custom-binding: { property: name, other: foo }" />
<!-- /ko -->
</div>
は、今、私が解決できるようにする必要があります:私はこのようなバインディングを持っているとしたら
{
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") },
]
}
今ここでの問題は次のとおりです。ですから、例えば
は、私がオブジェクトを持って言うことができますname
ここではname
とは対照的にrootModel.groups[currentIndex].name
になります。現在私はバインディングの中でプロパティが"name"
であることを知る方法はないと思うので、これを文字列として渡すか、オブジェクトにカスタム属性をバインディングする必要があるかもしれません探す。どちらの方法でも、バインディングのスコープ内で、observable(スコープ内に適用されたrootModelに関連して)のプロパティパスをどうにか取得できる必要があります。
私はそれが狂っていると知っていますが、それは可能な限り私ができることができなければならないことです。したがってforeachは、子バインディングスコープが変更され、すべてのシナリオでラップされるシナリオの1つに過ぎません。このカスタムバインディングで使用されるプロパティに対してproperty-path
を構築する必要があります。
これを行う方法はありますか?
方法を見て気軽にその質問は、ko.contextFor(element)ヘルパーがあなたの目標に近づけることができますか?そしてあなたが言ったように、 '財産'は間違いなく文字列でなければなりません。 –
Hey 'contextFor(element)'は、バインディング内で取得するのと同じ種類のコンテキストしか提供しないので、すべてのオブジェクト値であり、プロパティ名や何か(ほとんどの場合はプロパティ名は必要ありません)ではありません。 – Grofit