javascript - KnockoutJS - 模板上的点击事件

标签 javascript knockout.js jquery-templates

我有以下 KnockoutJS 模板(使用 jquery.tmpl 呈现):

<script id="contactsTemplate" type="text/html">
    <li data-bind="click: contactViewModel.test">${DisplayName}</li>
</script>

<ul id="contact-list" data-bind="template: {name: 'contactsTemplate', foreach:contacts}">
</ul>

和以下模型 View :

var contactViewModel = function (contacts) {
var self = this;

self.contacts = contacts;

self.test= function () {
    console.log("CLICK");
}

如果我使用此代码,则不会触发点击事件。如果我创建一个匿名函数,例如:

<script id="contactsTemplate" type="text/html">
    <li data-bind="click: function(){contactViewModel.test()}">${DisplayName}</li>
</script>

我得到以下异常:

Uncaught TypeError: Object function (contacts) {
 var self = this;
 self.contacts = contacts;
 self.test= function () {
     console.log("CLICK");
 }
} has no method 'test'

解决方案

解决方案是:$parent。

data-bind="click: $parent.test"

最佳答案

您的 contactViewModel 函数是构造函数,但是,您正试图将其用作通过该函数构造的对象的实例。您的 contactViewModel 公开了一组您绑定(bind)到 contactsTemplate 模板的联系人。因此,此模板中所有绑定(bind)的“上下文”是数组中的对象实例。要绑定(bind)到父对象(即 contactViewModel)上的函数,请使用 Knockout 2.0 父伪变量:

data-bind="click: $parent.test"

关于javascript - KnockoutJS - 模板上的点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9749845/

相关文章:

javascript - Select2 4.0 单击项目不会触发 select2 :select

javascript - Google Scripts 从单元格中填充值数组及其位置

javascript - 使用 KockoutJS 动态添加 css 类

javascript - 在 jQuery 模板中使用 JavaScript

jquery - Knockoutjs 和模板 : How to inject a string template without involving the DOM?

javascript - 将鼠标事件附加到 Raphael 矩形

javascript - 单击事件后事件冒泡 jQuery .delegate() 或 .live()

knockout.js - knockout 嵌套的 observableArrays 似乎是未定义的,而不是空的。

javascript - 如何使 <td> 的内容除了左栏外不可见?

jquery - 链接jquery模板appendTo方法