在淘汰赛 1.3 中将选项传递给模板
在 knockoutjs 1.2.1 中我可以这样做:
<div data-bind="template: {name: 'Bar', foreach: persons, templateOptions:{fooMode: true} }"/>
<script id='Bar'>
{{if $item.fooMode}} FOO! {{/if}}
</script>
我试图将其翻译为 knockout 1.3.0beta 但
<div data-bind="template: {name: 'Bar', foreach: persons, templateOptions:{fooMode: true} }"/>
<script id='Bar'>
<span data-bind="if: $item.fooMode">FOO!</span>
</script>
新的本机模板引擎不尊重 templateOptions。
还有其他方法可以将任意数据传递到模板中吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
正如您所发现的,本机模板引擎不支持
templateOptions
,它是 jQuery 模板插件options
功能的包装器。您可以采取两种方式:
将数据放在视图模型上,并在模板内使用
$root.fooMode
或$parent.fooMode
。这将是最简单的选择。否则,如果您不想在视图模型中使用该值,则可以使用自定义绑定来操作上下文,如下所示:
这是正在使用的示例: http://jsfiddle.net/rniemeyer/tFJuH/
请注意,在
foreach
场景中,您会发现您的选项$parent.$item
而不仅仅是$item
。As you discovered, the native template engine does not support
templateOptions
which was a wrapper to the jQuery Template plug-in'soptions
functionality.Two ways that you could go:
Place your data on your view model and use
$root.fooMode
or$parent.fooMode
inside of your template. This would be the easiest option.Otherwise, if you don't want the value in your view model, then you can use a custom binding to manipulate the context like:
Here is a sample in use: http://jsfiddle.net/rniemeyer/tFJuH/
Note that in a
foreach
scenario, you would find your options on$parent.$item
rather than just$item
.我建议桑德森的提案,您可以将新的文字传递给包含模型和额外数据(模板选项)的模板数据。
工作演示 http://jsfiddle.net/b9WWF/
来源 https://github.com/knockout/knockout/issues/246#issuecomment-3775317
I would suggest Sanderson's proposal where you would pass new literal to template data that contains model and extra data (template options).
Working Demo http://jsfiddle.net/b9WWF/
Source https://github.com/knockout/knockout/issues/246#issuecomment-3775317