2012-10-24 28 views
16

Khi tôi hiểu, $index có sẵn bên trong một ràng buộc foreach:, cho chỉ mục của đối tượng ... Tôi có một ràng buộc click: ví dụ: click:foo, tôi cần truy cập $index bên trong foo.

Có cách nào không?

Trả lời

9

có,

<input type="button" data-bind="click: function(data, event) { myClickHandler($index, data, event); }"/> 
+0

Điều này thật đáng buồn nhưng đúng. – jessegavin

+0

Tôi đồng ý với trình xử lý mặc định cho các nhấp chuột, làm mờ và như vậy sẽ chuyển nhiều thông tin hơn thay vì chỉ dữ liệu và sự kiện. Tôi sử dụng một ràng buộc tùy chỉnh bản thân mình nếu gian lận nhanh ở trên không phù hợp với giải pháp. – ethermal

36

Thay vì hack xung quanh nó thông qua một chức năng trong vòng ràng buộc của bạn, bạn chỉ cần để có được bối cảnh ràng buộc. Miễn là bạn có quyền truy cập vào phần tử DOM được liên kết với ràng buộc, bạn có thể nhận được bối cảnh ràng buộc và tất cả các thuộc tính của nó bằng cách sử dụng hàm ko.contextFor().

Đối tượng sự kiện bạn nhận được trong trình xử lý cho phép bạn truy cập vào nút qua thuộc tính target. Lấy bối cảnh bằng cách sử dụng đó.

var viewModel = { 
    foo: function (data, event) { 
     var context = ko.contextFor(event.target); 
     // do stuff with context.$index() 
    } 
}; 
+3

Vì '$ index' là một quan sát được, tôi phải làm' ngữ cảnh. $ Index() 'với dấu ngoặc đơn, vì các hàm quan sát là các hàm trong knockout http://goo.gl/TIGYV1 – andrewcockerham

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