fix(jqLite): fire $destroy event via triggerHandler

in jQuery 1.8.x the data() data structure is changed and events are
not accessible via data().events. Since all we need is to trigger
all event handlers, we can do so via triggerHandler() api instead of
mocking with the internal jQuery data structures.

This fix was originally proposed by PeteAppleton via PR #1512.

Closes #1512
This commit is contained in:
Igor Minar 2012-11-24 01:51:19 +01:00
parent 650fd933df
commit b9a9f91fbf
2 changed files with 2 additions and 10 deletions

View file

@ -130,12 +130,7 @@ function JQLitePatchJQueryRemove(name, dispatchThis) {
for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) {
element = jqLite(set[setIndex]);
if (fireEvent) {
events = element.data('events');
if ( (fns = events && events.$destroy) ) {
forEach(fns, function(fn){
fn.handler();
});
}
element.triggerHandler('$destroy');
} else {
fireEvent = !fireEvent;
}

View file

@ -5,10 +5,7 @@ describe('angular.scenario.Application', function() {
var app, frames;
function callLoadHandlers(app) {
var handlers = app.getFrame_().data('events').load;
expect(handlers).toBeDefined();
expect(handlers.length).toEqual(1);
handlers[0].handler();
var handler = app.getFrame_().triggerHandler('load')
}
beforeEach(function() {