Tôi có một chút javascript:KnockoutJS giá trị toggling trong dữ liệu ràng buộc
function ViewModel() {
var self = this;
self.highlight = ko.observable(true);
}
ko.applyBindings(new ViewModel());
Và html bổ sung cho nó:
<div data-bind="css: { highlighted: highlight }, click: highlight(!highlight())">
random string
</div>
Những gì tôi đang cố gắng để đạt được:
- Lớp css 'được đánh dấu' chỉ được kích hoạt khi đánh dấu var là đúng
- Nhấp vào div sẽ chuyển giá trị bool của var nổi bật
- kết quả Wanted: nhấp vào div để kích hoạt/tắt lớp css của nó
gì tôi nhận được:
- Giá trị ban đầu của nổi bật là
true
, nhưng lớp css bắt đầu bị hủy kích hoạt (nếu tôi thay đổi giá trị ban đầu thànhfalse
, lớp css được kích hoạt: có vẻ như tôi đã kích hoạt nhấp chuột nào đó khi tôi chưa nhấp vào bất kỳ thứ gì) - lớp css của div không bật nhấp vào
Tôi không muốn tạo hàm nhấp chuột tương ứng mới trong ViewModel. Tôi đang tìm kiếm nếu có thể cho một chút mã tôi có thể đặt chỉ nội tuyến trong các ràng buộc dữ liệu.
Dưới đây là các mã trên JSFiddle: http://jsfiddle.net/4wt4x/1/
bất cứ ai có thể giải thích những gì đang xảy ra và những gì tôi đang làm sai?
Cảm ơn bạn đã trả lời. Có cách nào để làm điều này một mình trong bản thân ràng buộc dữ liệu không? Đó là những gì tôi đang tìm kiếm nếu có thể. – dk123
Cá nhân tôi sẽ xem xét việc thực hành không tốt để đặt một cái gì đó như thế trong một ràng buộc. Toàn bộ vấn đề là giữ cho chế độ xem của bạn tách biệt với javascript của bạn. Tuy nhiên, nếu bạn thực sự muốn nó như thế, bạn có thể chỉ cần nhấp vào: function (self) {self.highlight (! Self.highlight())} cho ràng buộc, nhưng tôi sẽ không khuyên rằng kể từ khi gỡ lỗi sau này bạn sẽ kết thúc phải tìm javascript ở hai nơi thay vì chỉ một. Nó trở thành một vấn đề với các dự án lớn hơn với nhiều người đóng góp. –
Cảm ơn bạn đã trả lời và nhận xét thêm về cấu trúc khung nhìn. Tôi sẽ đi với ý tưởng của bạn và tạo ra các chức năng trong javascript. Cảm ơn! – dk123