如何在Backbone click事件中获取“this”元素?

8iwquhpp  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(158)

当我点击某个元素时,我想对该元素做一些事情(比如添加一个类),尽管我不相信我的事件处理程序中的这个'this'元素实际上就是那个元素。下面是我的代码的一个示例:

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中添加“active”类。我会有更多的事件,这些事件会有不同的类等等,但是现在我希望得到一些基本的东西。
同时,接受任何关于代码结构的建议!

rqqzpn5f

rqqzpn5f1#

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

var ApplicationView = Backbone.View.extend({

    el: $('body'),

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

    // ... other code

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

pnwntuvh2#

我建议将您要访问的元素存储在视图属性中。
也就是说

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');
    },
});

相关问题