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