【问题标题】:Knockout.js: Pass current object to function from jQuery templateKnockout.js:将当前对象传递给 jQuery 模板中的函数
【发布时间】:2015-11-08 04:34:18
【问题描述】:

如何在淘汰赛中将当前对象从模板传递给函数。这是代码:

<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 对象。为什么? click : $root.check 在第一种情况下打印 e.x Object {name: "Jane", age: 125} ,在第二种情况下在模板内打印 viewModel {}

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      好的,我找到了解决方案,问题是 jquery.tmpl.min.js 模板引擎...

      【讨论】:

      • 请编辑答案并说明您是如何解决问题的。
      猜你喜欢
      • 1970-01-01
      • 2013-08-17
      • 2011-08-26
      • 2013-11-17
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      相关资源
      最近更新 更多