1

我想弄清楚如何侦听自定义事件的对象尚未原型或不是dom对象在underscore.js/backbone.js。绑定事件动态对象在下划线/主干

例如:

//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  = $("<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 #<Object> has no method 'bind' 

当然这是有道理的,世界上没有绑定在对象上,但任何人都得到了一个很好的解决方案呢?

非常感谢 一个

回答

4

,如果你要绑定到一个对象,你需要使它延伸,同时Backbone.Events对象。

可以说你创建一个新的对象

var o = {}; 

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

除非你backbone.Events延伸。

var o = _.extend({}, Backbone.Events); 

o.bind('myCustomEvent', function(){ 
    alert('triggered!'); 
}); 

o.trigger('myCustomEvent'); 

我不知道这意味着什么性能,如果你想开始结合上百个对象。 所以你应该在使用它之前测试一下。

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