Knockout.js:将当前对象从jQuery模板传递给函数

时间:2015-11-07 20:09:24

标签: knockout.js

如何在淘汰赛中将当前对象传递给模板中的功能。这是代码:

<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 {}

2 个答案:

答案 0 :(得分:1)

由于实际的each循环是由jQuery-templates而不是Knockout执行的,因此循环中的绑定上下文不会改变。

您必须从jQuery-template手动获取它并将其传递给函数:

<b data-bind="click: $root.check.bind($value)">${name}</b> is ${age} years old

答案 1 :(得分:0)

我找到了解决办法,问题是jquery.tmpl.min.js模板引擎...