我可以在模板绑定中传递变量吗?

时间:2013-12-06 18:24:44

标签: knockout.js knockout-templating

我知道这不是一个长期使用的好方法,但是对于故障排除,有什么方法可以在绑定模板时传递一个简单的字符串然后在模板中作为变量访问它?例如,如果这是我的约束力:

<!-- ko template: { name: tmplOne }, myvar: 'apple' -->

这是 tmplOne

<div>
    <span>Fruit: </span>
    <span data-bind="text: myvar"></span>
</div>

这会产生以下结果:

fruit: apple

即使我必须在名为“fruit”的viewmodel中声明一个observable,我可以手动将其设置为模板绑定吗?

4 个答案:

答案 0 :(得分:6)

使用

<!-- ko template: { name: tmplOne, templateOptions: {myvar: 'apple'} } -->

更多信息:http://www.knockmeout.net/2011/03/quick-tip-reusing-template-by-passing.html

答案 1 :(得分:3)

您可以为模板绑定提供数据参数,并根据您的需要定义对象文字:

<!-- ko template: { name: tmplOne }, myvar: 'apple' -->

而是这样做:

<!-- ko template: { name: tmplOne, data: { myvar: 'apple' } } -->

http://knockoutjs.com/documentation/template-binding.html

答案 2 :(得分:1)

对于阅读更高版本的淘汰赛的人来说,这似乎是组件与模板的良好用法。

答案 3 :(得分:0)

通过为绑定的data参数提供合成,您可以在保持当前应用的viemodel的同时将任意数据传递到模板。

例如,您可以将模板内容包装在with绑定中,并绑定到组成的$data属性,从而创建新的绑定上下文。这样,当前应用的绑定就不需要更新。

ko.applyBindings({
  fruits: ['banana', 'orange']
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

<div data-bind="template: { name: 'tmplOne', data: { myModelData: $data, myVar: 'apple' } }"></div>

<script type="text/html" id="tmplOne">
  <!-- ko with: myModelData -->
    <span>My model</span>
    <ul data-bind="foreach: fruits">
      <li data-bind="text: $data"></li>
    </ul>
    <div>
      <span>My custom data:</span>
      <span data-bind="text: $parent.myVar"></span>
    </div>
  <!-- /ko -->
</script>