Kręgosłup.Wiązanie zdarzeń js
Używam szkieletu.js mają segmentowy element interfejsu użytkownika dla każdego modelu. Każdy z nich składa się z ul z kilkoma elementami li. Chcę powiązać zdarzenie tak, że po kliknięciu jednego z tych elementów mogę określić, który z nich został kliknięty i zaktualizować model o odpowiednią wartość.
Problem polega na tym, że Backbone wiąże zdarzenia (są one w hash zdarzeń widoku) tak, że "to" w funkcji callback odnosi się do widoku, a nie do elementów li. Oznacza to, że nie mogę określić, który z kilku elementów li został kliknięty. Jeśli użyłem normalnego wiązania jQuery, mogę mieć" to " związane z elementami li, ale wtedy nie mam już śladu modelu, więc nie mogę go zaktualizować.
2 answers
Przyzwyczajenie JQuery do ustawianiathis
na to, co w danej chwili jest wygodne, jest dość paskudnym wzorcem, moim zdaniem -- na szczęście nigdy nie musisz na nim polegać:
onClick: function(e) {
this; // Still the view instance (as it should be).
e.target; // The element that was clicked.
e.currentTarget; // The element that was bound by the click event.
}
... Można użyć target
lub currentTarget
obiektu event, odpowiednio.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-11 13:03:24
Nie wiem, dlaczego nie mogę skomentować @jaszkenas odpowiedzi powyżej. Jego metoda jest poprawna (dziękuję!) ale pomyślałem, że wyjaśnię sytuację: w twoim programie obsługi zdarzeń możesz odzyskać element, z którym wydarzenie było związane. Przykładowy kod szkieletowy wyglądałby tak:
MyView = Backbone.View.extend({
events: {
'click .item': 'handleClick'
},
handleClick: function(e) {
this; // The view instance
e.target; // The element that was clicked
e.currentTarget; // The element that was bound by the click event
}
});
Używam tego do ustawienia domyślnego tekstu we wszystkich polach formularza...tak, nie przepadam jeszcze za HTML5:)
Edit: Btw, e. target to element surowy. Musisz użyć $(np. target), aby uzyskać jQuery dostęp.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-25 01:18:51