События Backbone и JQuery - PullRequest
       23

События Backbone и JQuery

1 голос
/ 28 ноября 2011

У меня есть простая задача - извлечь функцию прослушивания кликов из элемента DOM.

У меня есть две проблемы:

  1. Я не знаю, как получить прослушиватель событий, который был установлен с помощью addEventListener func
  2. $ (element) .data ('events') всегда пусто

Говоря о первой проблеме - я думаю, что это не критично, так как я использую эту функцию только в одном месте. Но вторая проблема - огромная боль ...

Я тестировал в чистой среде jQuery:

    $(element).click(function(){})
    $(element).data('events') /*contains events info*/

Но с магистралью:

    $(element).click(function(){})
    $(element).data('events') /*alway empty*/

Я не гуру JS, но, похоже, что нет никаких связанных данных вообще ... Может быть, это просто типичное поведение Backbone, но все же - как я могу получить обработчик событий?

1 Ответ

3 голосов
/ 28 ноября 2011

Если вы используете Backbone.js, вы должны управлять своими событиями внутри объекта Backbone.View и избегать захвата события непосредственно с помощью JQuery.

Вы должны попробовать что-то вроде этого:

var myBody  = $( 'body' );
var myDIV = $( '<DIV id="contentDIV"></DIV>' );
myBody.append( myDIV );
var myButton = $( '<button id="aButton">test</button>' );
myDIV.append ( myButton );

var MyView = Backbone.View.extend({
    el : myDIV,

    events: { 'click button#aButton' : 'doSomething' }, //here you bound the 
                                                        //event to a function.
    initialize: function(){
        _.bindAll(this, 'render') 
    },
    render: function(){
        myDIV.append('<br>working...');
    },
    doSomething: function(){
        alert( 'doSomething function.. after click event' );
    }
});

var myView = new MyView;
myView.render();

PS: хороший учебник для понимания, как это работает: http://arturadib.com/hello-backbonejs/

...