9

我对 Knockout.js 有疑问。我想将用户名传递给一个函数并在警报时显示它。奇怪的事情正在发生。每次我用正确的用户名刷新页面时都会收到警报,但是在我单击它后我没有得到任何响应。这里有什么问题?这是我的代码:

<ul data-bind="foreach: contacts">
   <li class="user-box"><span class="user-box-name" data-bind="text: username, click: $root.userClick(username)"></span>
   </li>
</ul>

self.userClick = function (x) {
    alert(x);
}
4

2 回答 2

29

click绑定接受单击控件时要调用的回调函数。

但是,在您的示例中,您正在调用该函数。因此,每次加载页面时都会发生这种情况,加载绑定并在编写函数时调用您的函数。你需要将它包装在一个函数中,这样它就不会被那样调用。

<span class="user-box-name"
      data-bind="text: username, click: function () { $root.userClick(username); }">
</span>
于 2013-01-06T09:40:37.203 回答
11

Knockout 将正确的对象传递给事件处理程序。这样做:

<ul data-bind="foreach: contacts">
   <li class="user-box">
     <span 
       class="user-box-name" 
       data-bind="text: username, click: $root.userClick"
     ></span>
   </li>
</ul>

self.userClick: function (obj, event) {
    alert(obj.username);
}
于 2013-01-06T09:47:53.503 回答