Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using backbonejs view, what is the best way to attach an "onload" event to an image tag?

I want to attach an "onload" event for an image in a backbonejs view. I am currently including it in the "events" as "load img":"function", but it is not getting fired off.

Any suggestions for doing this?

like image 634
KD12 Avatar asked Mar 22 '12 19:03

KD12


1 Answers

Backbone's event handling is based on delegate and delegate can only be used with events that bubble. The problem is that load events do not bubble; from the HTML5 specification:

If the download was successful
Set the img element to the completely available state, update the presentation of the image appropriately, and fire a simple event named load at the img element.

And a simple event does not bubble:

Firing a simple event named e means that an event with the name e, which does not bubble (except where otherwise stated) [...]

So you'll have to hook up a handler by hand with something like this:

render: function() {
    var self = this;
    this.$el.append(some_html_with_img_elements);
    this.$el.find('img').on('load', function() { self.img_loaded() });
    return this;
}

Demo: http://jsfiddle.net/ambiguous/c7wH2/

like image 132
mu is too short Avatar answered Sep 18 '22 20:09

mu is too short