0

Когда я нажимаю что-то, я хотел бы что-то сделать с этим элементом (т. Е. Добавить класс), хотя я не считаю, что этот «этот» элемент в моем обработчике событий на самом деле является этим элементом. Вот пример немного моего кода:Как получить элемент «this» в событии clickbone click?

var ApplicationRouter = Backbone.Router.extend({ 

    routes: { 
     "": "home", 
     "firstthing": "firstthing", 
    }, 

    firstthing: function() { 
     $(this).addClass('active'); 
    } 
}); 

var ApplicationView = Backbone.View.extend({ 

    el: $('body'), 

    events: { 
     'click #something': 'displayFirstThing' 
    }, 

    initialize: function(){ 
     this.router = new ApplicationRouter(); 
     Backbone.history.start(); 
    }, 

    displayFirstThing: function(){ 
     this.router.navigate("firstthing", true); 
    }, 
}); 

new ApplicationView(); 

Я хотел добавить класс «активный» в #something. У меня будет больше событий, которые будут иметь разные классы и т. Д., Но теперь я хочу, чтобы некоторые из них были утеряны.

Также, принимая любые предложения по структуре кода!

+2

Вы можете попробовать проверить 'аргумент' на функцию displayFirstThing. Магистраль может передавать объект 'event', и в этом случае вы можете попробовать использовать' event.target' или 'event.currentTarget'. –

+0

Это хороший совет @GregBurghardt. Поэтому я вижу, что «event.CurrentTarget» - это элемент, который я ищу, но передается ли это в мою функцию «firstthing»? – coffeebytes

+0

@GregBurghardt, или я думаю, мне интересно, есть ли способ использовать event.currentTarget в моей функции 'firstthing'? – coffeebytes

ответ

1

Магистраль передает объект события в качестве первого аргумента функции обратного вызова, из которого можно использовать currentTarget свойства для работы с элементом, который получил это событие. Например.

вар ApplicationView = Backbone.View.extend ({

el: $('body'), 

events: { 
    'click #something': 'displayFirstThing' 
}, 

// ... other code 

displayFirstThing: function(event){ 
    $(event.currentTarget).addClass('active'); 
}, 

});

0

Я бы предложил хранить элементы, которые вы хотите получить в свойствах вида.

т.е.

var ApplicationView = Backbone.View.extend({ 

    el: $('body'), 

    events: { 
     'click #something': 'displayFirstThing' 
    }, 

    render: function() { 
     // render the view 
     // store the link element in a property 
     this.$something = this.$('#something'); 
    }, 

    displayFirstThing: function(){ 
     this.$something.addClass('someclass'); 
    }, 
}); 
+0

Вы считаете, что более целесообразно выполнять эти действия в представлении или маршрутизаторе? – coffeebytes

+0

Конечно, в поле зрения – VJAI

Смежные вопросы