2013-01-06 31 views
8

Tôi gặp sự cố với Knockout.js. Tôi muốn chuyển tên người dùng đến một hàm và hiển thị nó trên cảnh báo. Một cái gì đó kỳ lạ đang xảy ra. Tôi nhận được thông báo mỗi khi tôi làm mới trang với tên người dùng chính xác, nhưng sau khi tôi nhấp vào nó tôi không nhận được bất kỳ phản ứng nào. Có gì sai ở đây? Đây là mã của tôi:Knockout.js - chuyển tham số

<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); 
} 

Trả lời

28

Các click ràng buộc chấp nhận một hàm callback được gọi khi kiểm soát được nhấp.

Tuy nhiên trong ví dụ của bạn, bạn đang gọi hàm thay thế. Vì vậy, những gì xảy ra là mỗi khi trang được tải, các ràng buộc được nạp và chức năng của bạn được gọi khi nó được viết. Bạn cần bọc nó trong một hàm để nó không được gọi như thế.

<span class="user-box-name" 
     data-bind="text: username, click: function() { $root.userClick(username); }"> 
</span> 
+0

Cảm ơn bạn rất nhiều! Nó hoạt động! –

+0

có cùng một vấn đề, giải pháp này hoạt động tốt, cảm ơn – Pawel

11

Knockout truyền đúng đối tượng cho trình xử lý sự kiện. Chỉ cần nó như thế này:

<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); 
} 
+0

Điều này phải là câu trả lời đúng. – USSliberty

+2

Không bao giờ có thể làm điều đó. Luôn nhận đối tượng không xác định. –

Các vấn đề liên quan