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ć.

Author: Chris, 2011-03-11

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.

 44
Author: jashkenas,
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.

 20
Author: Matt De Leon,
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