Mam kawałek javascript:KnockoutJS wartość przełączanie w danych-wiążą
function ViewModel() {
var self = this;
self.highlight = ko.observable(true);
}
ko.applyBindings(new ViewModel());
a html, który uzupełnia go:
<div data-bind="css: { highlighted: highlight }, click: highlight(!highlight())">
random string
</div>
Co usiłuję osiągnąć:
- "Podświetlona klasa css" aktywowana tylko po wyróżnieniu var jest
- Kliknięcie na div przełącza wartość bool var podświetleniem
- wynik Poszukiwany kliknięciu na div, aby aktywować/dezaktywować jego klasa css
Co dostaję:
- Wartość początkowa podświetleniem to jest
true
, ale klasa css jest dezaktywowana (jeśli zmienię wartość początkową nafalse
, aktywowana jest klasa css: wydaje mi się, że w jakiś sposób uruchomiłem kliknięcie, gdy nic jeszcze nie kliknąłem) - klasa css diva nie włącza się kliknij
Wolałbym nie tworzyć nowych odpowiednich funkcji kliknij wewnątrz ViewModel. Czekam, jeśli to możliwe, na fragment kodu, który mogę umieścić wyłącznie w linii danych.
Oto kod na JSFiddle: http://jsfiddle.net/4wt4x/1/
Może ktoś wyjaśnić, co się dzieje i co robię nieprawidłowo?
Dzięki za odpowiedź. Czy nie ma sposobu, aby zrobić to samodzielnie w samym wiązaniu danych? Właśnie tego szukam, jeśli to możliwe. – dk123
Osobiście uważam za złą praktykę umieszczanie czegoś takiego w wiązaniu. Chodzi o to, aby twój widok był oddzielony od twojego javascriptu. Jednakże, jeśli naprawdę tego chcesz, możesz po prostu kliknąć: function (self) {self.highlight (! Self.highlight())} dla wiązania, ale nie polecam, ponieważ od tego czasu debugowanie zakończyłoby się do znalezienia javascript w dwóch miejscach, zamiast jednego. Staje się problemem przy większych projektach z wieloma współpracownikami. –
Dzięki za odpowiedź i dodatkowy komentarz do struktury widoku. Pójdę z twoim pomysłem i utworzę funkcję w javascript. Dzięki! – dk123