【发布时间】:2016-08-26 02:54:12
【问题描述】:
我正在尝试从页面视图模型访问嵌套组件的视图模型。
这是模板:
<collapse-panel>
<custom-component data-bind="viewModel: $root.customComponentVM">
</custom-component>
</collapse-panel>
折叠面板组件的模板:
<div class="collapse panel-collapse" data-bind="
template: { nodes: $componentTemplateNodes }">
</div>
在自定义组件中,我使用以下打字稿代码添加了名为 viewModel 的自定义绑定:
ko.bindingHandlers["viewModel"] = {
init: (element: any,
valueAccessor: () => KnockoutObservable<any>,
allBindingsAccessor: KnockoutAllBindingsAccessor,
viewModel: any,
bindingContext: KnockoutBindingContext): void => {
valueAccessor()(viewModel);
}
};
我的问题是 init 函数中的 viewModel 对象应该是 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' ...
并且还使用 Knockout 注释语法绑定 $componentTemplateNodes:
<div class="collapse panel-collapse">
<!-- ko template: { nodes: $componentTemplateNodes } --><!-- /ko -->
</div>
但是我仍然得到错误的视图模型。我在这里做错了什么还是这是 Knockout 中的错误? 谢谢。
【问题讨论】:
-
不应该
valueAccessor()返回您正在寻找的viewModel吗?敲除通过参数提供的viewModel指的是绑定数据绑定的$data。 -
valueAccessor() 返回一个缩小的 js 函数,该函数返回可观察到的淘汰赛。不幸的是,这不是我正在寻找的 viewModel。谢谢
标签: knockout.js