7

我正在尝试在 knockout.js 中创建一个自定义组件。

HTML

<demo-widget>TEXT NEEDED</demo-widget>

Javascript

ko.components.register('demo-widget', {
    template: '<div>New Text</div>'
});

ko.applyBindings();

组件加载正常,一切正常,但我现在想要做的是能够获取原始自定义组件标签内的任何内容(例如“TEXT NEEDED”文本)。

知道我该怎么做吗?希望我解释得足够清楚。

这是一个小提琴:http: //jsfiddle.net/WhesleyBarnard/f7bmynp5/5/

4

2 回答 2

4

现在这是可能的(从 Knockout 3.3 开始),请参阅此处的 KnockoutJS 文档:将标记传递到组件中。

我不会在这里复制整个文本,但要点是:

默认情况下,[您的组件] 内的 DOM 节点将被剥离(不绑定到任何视图模型)并替换为组件的输出。但是,这些 DOM 节点并没有丢失:它们被记住,并以两种方式提供给组件:

  • 作为一个数组,$componentTemplateNodes可用于组件模板中的任何绑定表达式(即,作为绑定上下文属性)。通常这是使用提供的标记最方便的方法。请参见下面的示例。
  • 作为一个数组, componentInfo.templateNodes, 传递给它的createViewModel函数

然后组件可以根据自己的意愿选择使用提供的 DOM 节点作为其输出的一部分,例如通过template: { nodes: $componentTemplateNodes }在组件模板中的任何元素上使用。

相关的 SO 问题:淘汰赛 3.2:组件/自定义元素可以包含子内容吗?

于 2015-03-05T14:08:53.580 回答
1

为什么不使用 params 属性来保存初始文本:

html:

<demo-widget params="initialValue: 'text i need to get...'"></demo-widget>

js:

ko.components.register('demo-widget', {
    template: "<div data-bind=\"text: 'content in my component. previous was: '
                                      + initialValue \">
               </div>"
});

ko.applyBindings();
于 2014-10-09T15:35:15.750 回答