Knockout.js 敲除嵌套的$componentTemplateNodes返回错误的上下文';s节点?

Knockout.js 敲除嵌套的$componentTemplateNodes返回错误的上下文';s节点?,knockout.js,knockout-templating,Knockout.js,Knockout Templating,我目前正在开发一个布局引擎,使用knockout作为基础,但是我遇到了一点障碍。(很抱歉邮件太长) 我用的是淘汰赛3.5.1 我有以下index.html: general dock具有以下.html文件: UIManager.registerDockType函数使用以下参数注册具有敲除功能的驳接: ComponentName:第一个参数是自定义元素的名称,用于向knockout注册 DockClass:第二个参数被实例化并传递给元素 TemplateString:第三个参数是提供给敲

我目前正在开发一个布局引擎,使用knockout作为基础,但是我遇到了一点障碍。(很抱歉邮件太长)

我用的是淘汰赛3.5.1

我有以下index.html:


general dock具有以下.html文件:


UIManager.registerDockType函数使用以下参数注册具有敲除功能的驳接:

  • ComponentName:第一个参数是自定义元素的名称,用于向knockout注册
  • DockClass:第二个参数被实例化并传递给元素
  • TemplateString:第三个参数是提供给敲除类的模板字符串
有效的功能是:

ko.components.register(ComponentName{
模板:TemplateString,
视图模型:{
createViewModel:(参数,组件信息)=>{
如果(!componentInfo){
抛出新错误(“组件未正确初始化”);
}
var context=ko.contextFor(componentInfo.element);
新的DockClass(componentInfo.element);
返回上下文。$data;
}
}
})
这就是所谓的:

UIManager.registerDockType(“垂直停靠”,垂直停靠,”);
UIManager.registerDockType(“水平dock”,HorizontalDock,”);
registerDockType(“内容驳接”,CenterDock,”);
我希望输出以下HTML:


但我得到的是:



为什么会发生这种情况?为什么水平坞中我得到了总布局的$componentTemplateNodes

当我使用knockout 3.4.0并突出显示

但是,一旦我们到达
水平dock
,当knockout扩展常规dock时,它将创建一个新的$componentTemplateNodes值(因为它有子节点),其中包含以下表示形式:


我认为返回原始$componentTemplateNodes的唯一方法是向上递归$parentContext,或者将它们作为参数传递

这是虫子还是我在做傻事