将事件绑定到下划线/主干中的动态对象

我正在试图弄清楚如何在没有原型的对象上监听自定义事件,或者在underscore.js / backbone.js中不是dom对象。

例如:

//this is inside a view object play: function(arg) { this.a = this.image(this.model.a); this.a.bind("ready",start,this);//<--- causes error this.b = this.image(this.model.b); this.b.bind("ready",start,this);//<--- causes error function start() { // do some stuff in here } //some more stuff }, image: function(args) { // load the image, get its data, attach to original model then return it. var args = args; var img = $(""); var t = this; img.load(function(){ t.pasteboard.drawImage(this,0,0); args.imageData = t.pasteboard.getImageData(0,0,args.width,args.height); args.ready = true; args.trigger("ready",args); }).attr("src",args.src).hide(); return args; }, 

模型看起来大致如下:

 a:{ src:"/img/a.jpg", width:1320, height:639, x:0, y:0, opactiy:0, scale:[1,1] }, b:{ src:"/img/b.jpg", width:1320, height:639, x:0, y:0, opactiy:0, scale:[1,1] }, 

而错误是:

 Uncaught TypeError: Object # has no method 'bind' 

当然,有理由认为没有绑定对象,但有没有人有一个很好的解决方案呢?

非常感谢A.

如果要绑定到对象,则需要从Backbone.Events对象进行扩展。

假设您创建了一个新对象

 var o = {}; 

你不能绑定它, o.bind()不存在

除非你从backbone.Events扩展。

 var o = _.extend({}, Backbone.Events); o.bind('myCustomEvent', function(){ alert('triggered!'); }); o.trigger('myCustomEvent'); 

如果你想开始绑定到数百个对象,我不确定这对性能意味着什么。 所以你应该在使用它之前测试一下。

这也是用于在应用程序中创建全局事件聚合器的技术,如Derick Bailey在其post中所述( http://lostechies.com/derickbailey/2011/07/19/references-routing-and-the-event -aggregator-coordinating-views-in-backbone-js )