如何在淘汰赛中将当前对象传递给模板中的功能。这是代码:
<div data-bind="foreach: people">
<p>
<b data-bind="click: $root.check, text : name"></b>
</p>
</div>
<div data-bind="template: 'peopleList'"></div>
<script type="text/html" id="peopleList">
{{each people}}
<p>
<b data-bind="click: $root.check">${name}</b> is ${age} years old
</p>
{{/each}}
</script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="jquery.tmpl.min.js"></script>
<script src="knock.js"></script>
<script>
var viewModel = function() {
this.people = ko.observableArray([
{ name: 'Rod', age: 123 },
{ name: 'Jane', age: 125 },
]);
this.check = function (val) {
console.log('current value', val);
}
}
ko.applyBindings(new viewModel());
</script>
如果我从模板外部单击,检查工作为已检测,它打印当前对象,但如果我单击模板内部检查打印viewmodel对象。为什么?点击:$ root.check在第一种情况下打印e.x对象{名称:&#34;简&#34;,年龄:125},在第二种情况下打印模板打印viewModel {}
答案 0 :(得分:1)
由于实际的each
循环是由jQuery-templates而不是Knockout执行的,因此循环中的绑定上下文不会改变。
您必须从jQuery-template手动获取它并将其传递给函数:
<b data-bind="click: $root.check.bind($value)">${name}</b> is ${age} years old
答案 1 :(得分:0)