对象的事件委托;如何听事件?

时间:2014-08-05 17:42:49

标签: javascript jquery

如何在javascript对象上侦听自定义事件?我试图在触发事件时尝试触发应用级别对象的方法,但与DOM元素不同,我无法注册该对象的侦听器。

如何构建我的应用程序以侦听触发事件,然后执行操作?

JS:

$(document).ready(function(){
  var app = {};
  app.doStuff = function(){ alert("Yo!");};

  $(app).on("myCustomEvent", function(){
    alert("doing stuff");
    app.doStuff();
  });

  $("body").on('click', "#trigger", function(){
    alert("triggered");
    $(this).trigger("myCustomEvent");
  });
});

在jsbin中重播: http://jsbin.com/zopubuso/1/edit

这个背后的原因:

我正在创建一个骨干应用程序,我在app对象中有一个全局事件。我试图通过触发事件来在视图之间进行交流:

app.on("myEvent", MyView.model.doStuff);
app.trigger("myEvent");

但是我无法解决这些事件。

1 个答案:

答案 0 :(得分:2)

尝试:

使用jquery触发:

$(app).trigger("myCustomEvent");

http://jsfiddle.net/9w8A5/

触发主干事件:

首先您需要使用Backbone.Events扩展对象:

var app = {};
_.extend(app, Backbone.Events); // underscore.js '_.extend', We can also use jquery '$.extend()'
... on("myCustomEvent")...
app.trigger("myCustomEvent");

演示:http://jsfiddle.net/A5484/1/


从agconti更新。

这是在骨干中完成附加事件的简单方法:

var app = _.extend({}, Backbone.Events);
var myView = Backbone.View.extend({
    initialize: function(){

        ... other configuration stuff ...

        app.on( "myCustomEvent", function(){
            this.doStuff();
        }, myView);
    },
    doStuff: function(){ alert("Yo!"); }
});

app.trigger('myCustomEvent');

*使用骨干事件对象然后像我试图做的那样附加一个app.on();的监听器会更有利。