主干和 jQuery 事件

发布于 2024-12-18 10:19:50 字数 619 浏览 0 评论 0原文

我有一个简单的任务 - 从 DOM 元素检索点击侦听器函数。

我遇到了两个问题:

  1. 我不知道如何获取通过 addEventListener 函数设置的事件监听器
  2. $(element).data('events') 总是empty

谈论第一个问题 - 我认为这并不重要,因为我只在一个地方使用这个函数。但第二个问题是一个巨大的痛苦...

我已经在纯 jQuery 环境上进行了测试:

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

但是对于 Backbone:

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

我不是 JS 大师,但似乎根本没有绑定数据..也许这只是典型的 Backbone 行为,但仍然 - 我如何检索事件处理程序?

I have a simple task - retrieve click listener function from DOM element.

I've fased two problems:

  1. I have no idea how to obtain event listener, that was set via addEventListener function
  2. $(element).data('events') is always empty

Talking about first problem - I think it's not critical as I'm using this function only in one place. But the second problem is a huge pain...

I've tested on pure jQuery environment:

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

But with Backbone:

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

I'm not a JS guru but it seems like there no bound data at all... Maybe it's just a typical Backbone behaviour, but still - how can I retrieve event handler?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

知足的幸福 2024-12-25 10:19:50

如果您使用 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/你好-backbonejs/

If you are using Backbone.js you should be managing your events inside a Backbone.View object and avoid capturing the event with JQuery directly.

You should try something like this:

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: A good tutorial for understanding how it works: http://arturadib.com/hello-backbonejs/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文