привязка событий к динамическим объектам в подчеркивании/основе

Я пытаюсь выяснить, как прослушивать пользовательские события для объектов, которые не были прототипированы или не являются объектами 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'

конечно, имеет смысл, что нет привязки к объекту, но есть ли у кого-нибудь хорошее решение для этого?

Большое спасибо А


person Alex    schedule 02.03.2012    source источник


Ответы (1)


если вы хотите привязаться к объекту, вам нужно будет расширить его от объекта Backbone.Events.

допустим, вы создаете новый объект

var o = {};

к нему нельзя привязаться, o.bind() не существует

если вы не расширяетесь от backbone.Events.

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

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

o.trigger('myCustomEvent');

я не уверен, что это означает для производительности, если вы хотите начать привязку к сотням объектов. поэтому вы должны протестировать это, прежде чем просто использовать его.

это также метод, используемый для создания глобального агрегатора событий в вашем приложении, как описано Дериком Бейли в его сообщении (http://lostechies.com/derickbailey/2011/07/19/references-routing-и-агрегатор-событий-координация-представлений-в-базе-js/)

person Sander    schedule 02.03.2012