自定义绑定中使用ko.renderTemplate的上下文

时间:2016-09-13 16:29:53

标签: javascript knockout.js

我想在淘汰赛中使用带有自定义bindingHandler的命名模板,但似乎传递给自定义绑定的viewModel被剥夺了$ root,$ parent,$ component等的上下文属性。我的情况我需要这个背景。

当我在引用$ parent的模板上执行ko.renderTemplate时出现错误 - " ReferenceError:$ parent未定义"

注意:绑定到对象" bob"只是说明我需要" bob"" $父。看来我可以通过执行ko.contextFor(element)来获取父viewModel的上下文,但我需要" bob"对象的背景......

JAVASCRIPT:

<div>You've clicked <span data-bind='text: numberOfClicks'>&nbsp;</span> times</div>
<div data-bind="with:bob">
    <span data-bind="test:'testTemplate'"></span>
</div>



<script id="testTemplate" type="text/html">
<span data-bind="text:name" />
<button data-bind="click:$parent.registerClick">CLICK</button>
</script>

HTML

$(document).ready(function() {
  $('.row-horizon').mousewheel(function(e, delta) {
    this.scrollLeft -= (delta * 40);
    e.preventDefault();
  });

});

jsfiddle reproduction here

1 个答案:

答案 0 :(得分:2)

绑定上下文对象是$parent等所在的位置。您应该将bindingContext传递给ko.renderTemplate而不是viewModel

ko.renderTemplate(templateId, bindingContext, {}, element, "replaceChildren");

我已经使用此更改更新了您的jsfiddle示例,并结合其他人使其正常工作:https://jsfiddle.net/g462td77/2/