如何在Backbone点击事件中获得'this'元素?

时间:2014-11-20 17:18:29

标签: jquery backbone.js backbone-views backbone-events backbone-routing

当我点击某些内容时,我想对该元素做一些事情(即添加一个课程),但我并不相信这个'这个'我的事件处理程序中的元素实际上是该元素。以下是我的代码示例:

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 个答案:

答案 0 :(得分:2)

Backbone将事件对象作为回调的第一个参数传递给您,您可以使用currentTarget属性来处理接收事件的元素。 E.g。

var ApplicationView = Backbone.View.extend({

    el: $('body'),

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

    // ... other code

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

答案 1 :(得分: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');
    },
});