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'

もちろん、オブジェクトにバインドがないことは理にかなっていますが、誰かがこれに対する良い解決策を持っていますか?

どうもありがとうA

4

1 に答える 1

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

于 2012-03-02T11:25:59.643 に答える