11

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?

pimvdb
  • 151,816
  • 78
  • 307
  • 352
KD12
  • 421
  • 1
  • 5
  • 15

1 Answers1

11

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/

Community
  • 1
  • 1
mu is too short
  • 426,620
  • 70
  • 833
  • 800
  • Perfect! That helped. Yes, I noticed the event bubbling problem while using "on" method of jquery. I was wondering, if backbonejs implemented a different logic. But, I did not know about the "simple events" yet. Thanks for the answer – KD12 Mar 22 '12 at 20:54