Nếu việc chuyển đổi lớp này không thực sự cần kết nối với dữ liệu trong mô hình chế độ xem của bạn, thì thực sự không có lý do gì bạn không thể làm những gì bạn đang làm bây giờ.
Dưới đây là một mẫu của làm thế nào để làm điều đó với các ràng buộc mặc định:
xem:
<ul data-bind="foreach: items">
<li data-bind="text: name, event: { mouseover: toggle, mouseout: toggle }, css: { hover: selected }"></li>
</ul>
xem mô hình mã:
var Item = function(name) {
this.name = ko.observable(name);
this.selected = ko.observable(false);
this.toggle = function() {
this.selected(!this.selected());
}
};
var viewModel = {
items: ko.observableArray([
new Item("one"),
new Item("two"),
new Item("three")
])
};
ko.applyBindings(viewModel);
Với cam kết ràng buộc tùy chỉnh bạn có thể thậm chí giảm nó xuống đến:
<ul data-bind="foreach: items">
<li data-bind="text: name, hoverToggle: 'hover'"></li>
</ul>
xem mô hình:
ko.bindingHandlers.hoverToggle = {
update: function(element, valueAccessor) {
var css = valueAccessor();
ko.utils.registerEventHandler(element, "mouseover", function() {
ko.utils.toggleDomNodeCssClass(element, ko.utils.unwrapObservable(css), true);
});
ko.utils.registerEventHandler(element, "mouseout", function() {
ko.utils.toggleDomNodeCssClass(element, ko.utils.unwrapObservable(css), false);
});
}
};
var Item = function(name) {
this.name = ko.observable(name);
};
var viewModel = {
items: ko.observableArray([
new Item("one"),
new Item("two"),
new Item("three")
])
};
ko.applyBindings(viewModel);
Bạn thậm chí có thể trở nên phức tạp hơn và có nó làm việc trong một thời trang giao như on
bằng cách đặt các ràng buộc ở mức cao hơn và áp dụng chuyển đổi dựa trên một selector. Theo một quy tắc chung, tôi nghĩ rằng đó là tùy thuộc vào nhà phát triển cho dù họ muốn sử dụng dây lên mã hoặc làm điều đó một cách khai báo khi chức năng không yêu cầu dữ liệu từ mô hình khung nhìn. Trong trường hợp của bạn, có thể đủ tốt để gắn bó với on
cho đến khi yêu cầu dữ liệu từ mô hình chế độ xem của bạn.
đã đồng ý. nếu không sử dụng dữ liệu, thì nó thực sự tùy ý theo cách bạn làm. tuy nhiên trong trường hợp này, tại sao không chỉ sử dụng CSS để áp dụng lớp mouseover? Đó là cách đơn giản nhất –
Có, nếu bộ chọn/lớp là tĩnh, sau đó nó có thể đi trong CSS. Chỉ xem xét là tôi tin rằng IE7 có một số vấn đề với: hover. –
Xin cảm ơn, ý kiến đóng góp tuyệt vời của cả hai bạn. Knockouts tùy chỉnh bindings là rất mạnh mẽ. Nhưng trong trường hợp này tôi nghĩ rằng tôi đi với css. – user1199595