1

プロトタイプ化されていないオブジェクトや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  = $("<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' 

それはバインドをtheresの理にかなっていますオブジェクトには誰もがこのための良い解決策を持っていますか?

どうもありがとうございました

答えて

4

あなたがオブジェクトにバインドしたい場合、あなたはそれがBackbone.Eventsオブジェクトから延びるようにする必要があります。

あなたはbackbone.Eventsから延長しない限り、o.bind()

存在しません。あなたは、あなたがそれにバインドすることはできません新しいオブジェクト

var o = {}; 

を作成して言うことができます。

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

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

o.trigger('myCustomEvent'); 

私はあなたが数百個のオブジェクトへの結合を開始したい場合は、これはパフォーマンスに何を意味するのかわかりません。 これを使用する前にこれをテストする必要があります。

この

も彼のポストにDerickベイリーによって記載されているように、あなたのアプリケーションにグローバルイベントアグリゲータを作成するために使用される技術である( http://lostechies.com/derickbailey/2011/07/19/references-routing-and-the-event-aggregator-coordinating-views-in-backbone-js

関連する問題