问题标签 [knockout-templating]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
125 浏览

templates - 将值传递给内部模板时,可观察到的淘汰模板不起作用

我正在渲染一个接受可观察数组的模板,在内部,它使用内部模板将属性的内容呈现为输入文本。如果我直接在父级的“foreach”中渲染输入文本,那么对文本的任何更改都是双向绑定并反映在相关的可观察数组项属性中,但是当使用内部模板时,它变成了一种方式。

--========== 父模板 =======--

--===== 用于内部模板的 Html(SkilRatingCommentTemplate.html)====

--======= 内部模板的js代码================

0 投票
0 回答
54 浏览

knockout.js - 淘汰嵌套的 $componentTemplateNodes 返回错误的上下文节点?

我目前正在开发一个使用淘汰赛作为基础的布局引擎,但我遇到了一些障碍。(对不起,很长的帖子)

我正在使用淘汰赛 3.5.1。

我有以下 index.html:

general-dock 有以下 .html:

UIManager.registerDockType 函数使用以下参数注册一个带有敲除的扩展坞:

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

有效的功能是这样的:

并且是这样调用的:

希望输出以下 HTML:

但我得到的是:


为什么会这样?为什么水平码头中我得到了通用布局的 $componentTemplateNodes?

当我使用淘汰赛 3.4.0 并<!-- ko template使用淘汰赛检查器突出显示节点时,它显示了我期望的 $componentTemplateNodes,但是 DOM 实际上具有父级的 $componentTemplateNodes。升级到 3.5.0 淘汰检查器后,DOM 显示相同的内容(尽管不是我所期望的)。


我所期望的是(与 $data 一样)如果该模板节点有子节点,则每次输入一个剔除控制模板节点时都会创建一个新的 $componentTemplateNodes。并且当递归 dom 时,每个满足该条件的子节点都会用它自己的 $componentTemplateNodes 替换当前的 $componentTemplateNodes。

这意味着 $componentTemplateNodesgeneral-dock将是:

但是一旦我们到达horizontal-dock当淘汰赛扩展通用码头时,它将创建一个新的 $componentTemplateNodes 值(因为它有孩子),其中包含以下表示:

我预计返回原始 $componentTemplateNodes 的唯一方法是递归 $parentContext 或将它们作为参数传递。

这是一个错误还是我在做一些愚蠢的事情?