淘汰带有命名模板的3.2组件
Knockout 3.2 components with named templates?
我正在尝试使用knockout 3.2.0中的新组件系统。
目前没有太多的文档,但这是可行的。
ko.components.register('price-input', {
template: '<span>price-input</span>'
})
但是template
绑定允许您指定一个已经存在于DOM中的模板名称,例如:
<script type="text/html" id="price_input">
<span>price-input</span>
</script>
那么你可以这样做:
<div data-bind="template: {name: 'price_input'}"></div>
所以我试了这个:
ko.components.register('price-input', {
template: {name: 'price_input'}
})
但它不起作用。是否有办法在新组件中使用命名模板,或者它们必须内联或加载AMD。
感谢编辑:在RP Niemeyer的回答之后,为了澄清,这里是我尝试他的答案的模板:
<script type="text/html" id="ifx_price_input">
<h4>PRICE INPUT <span data-bind="text: value"></span></h4>
</script>
组件代码:
ko.components.register('price-input', {
template: {element: 'ifx_price_input'}
})
加载模板,但将其视为转义字符串。
想法?
您可以传递一个element
属性,该属性可以是元素本身,也可以是元素的id
字符串,例如:
template: { element: 'myTmpl' }
在v3.2.0 beta中,这种情况没有得到很好的处理,因此需要InternalFX。
将在v3.2.0 final中修复。它将如您所期望的那样工作-只需引用script
、template
或textarea
元素,其逻辑内容将被解释为模板节点。
如果您感兴趣,修复和测试这个的提交在这里:https://github.com/knockout/knockout/pull/1454
最后用一些hack解决了这个问题…我希望这个问题能得到优秀开发者的更好回答。
这工作。基本上,我只是手动加载模板文本并将其传递给register
函数。所以它就像内联一样工作。
ko.components.register('price-input', {
template: $('#ifx_price_input').html()
})
相关文章:
- React重新渲染但未显示正确的组件
- 不能从angular2中的子组件指定父组件中的数组
- 拨打'父亲'函数形式a'儿童'ReactJS中的组件
- React组件等待所需道具进行渲染
- 如何创建带有插槽的vue js组件预加载程序
- 使用AMD时未定义淘汰组件视图模型
- 从淘汰js组件中获取数据
- 带有淘汰SPA的HTML尝试使用组件,绑定不起作用
- 在viewModel之前注册淘汰组件的问题
- 淘汰foreach和模板中的组件
- 如何在淘汰amd组件之间应用过渡效果
- 淘汰3.2 amd组件,不更新可观测值
- 淘汰:可扩展的主题组件
- 淘汰嵌套组件:$(document).ready() ..在加载嵌套组件之前运行
- 淘汰带有命名模板的3.2组件
- 将现有模型传递给淘汰组件绑定
- 将参数传递给淘汰组件
- 淘汰组件更新未被父视图模型订阅的可观察对象
- 如何引用被淘汰组件改变的元素
- 如果元素在模板返回前被移除,则淘汰组件失败