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 に答える