привязка событий к динамическим объектам в подчеркивании / магистрали - PullRequest
1 голос
/ 02 марта 2012

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

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

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

1 Ответ

4 голосов
/ 02 марта 2012

Если вы хотите привязать к объекту, вам нужно будет расширить его от объекта 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-and-the-event-aggregator-coordinating-views-in-backbone-js)

...