ページビューモデルからネストされたコンポーネントのビューモデルにアクセスしようとしています。
これはテンプレートである:
<collapse-panel>
<custom-component data-bind="viewModel: $root.customComponentVM">
</custom-component>
</collapse-panel>
テンプレート崩壊パネルコンポーネントのカスタム・コンポーネントで
<div class="collapse panel-collapse" data-bind="
template: { nodes: $componentTemplateNodes }">
</div>
、私はカスタムは、以下typescriptですコードを使用して、ビューモデル命名結合加え:
ko.bindingHandlers["viewModel"] = {
init: (element: any,
valueAccessor:() => KnockoutObservable<any>,
allBindingsAccessor: KnockoutAllBindingsAccessor,
viewModel: any,
bindingContext: KnockoutBindingContext): void => {
valueAccessor()(viewModel);
}
};
私の問題は、init関数shのviewModelオブジェクトouldはCustomElementVMですが、代わりにCollapsePanelVMを取得します。
これはinitメソッドにブレークポイントを追加するときに私が得るものです:
element //the expected custom-element
viewModel //the incorrect CollapsePanelVM
ko.dataFor(element) //also returns the incorrect CollapsePanelVM
私はまた、次の構文を使用してカスタム要素を結合しようとしている:
<div data-bind="component: {name: 'custom-component' ...
も結合ノックアウトコメント構文も使用する$ componentTemplateNodes:
<div class="collapse panel-collapse">
<!-- ko template: { nodes: $componentTemplateNodes } --><!-- /ko -->
</div>
私は間違ったviewModelを取得します。私はここで何か間違っているのですか、これはノックアウトのバグですか?おかげさまで
あなたが探している 'viewModel'を' valueAccessor() 'で返してはいけませんか?パラメータを介したノックアウトによって提供される 'viewModel'は、データバインドがバインドされた' $ data'を参照します。 – user3297291
valueAccessor()は、ノックアウト観測値を返す縮小されたjs関数を返します。残念ながら、私が探しているビューモデルではありません。ありがとう – skety