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()不存在

除非您从骨干网扩展。事件。

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 回答