如何在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");
但是我无法解决这些事件。
答案 0 :(得分:2)
尝试:
使用jquery触发:
$(app).trigger("myCustomEvent");
触发主干事件:
首先您需要使用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();
的监听器会更有利。