Ticket #4188: ie6-memleaks.patch

File ie6-memleaks.patch, 1.4 KB (added by ivarsv, 14 years ago)
  • ui.core.js

     
    274274                        options);
    275275
    276276                this.element = $(element)
    277                         .bind('setData.' + name, function(event, key, value) {
    278                                 if (event.target == element) {
    279                                         return self._setData(key, value);
    280                                 }
    281                         })
    282                         .bind('getData.' + name, function(event, key) {
    283                                 if (event.target == element) {
    284                                         return self._getData(key);
    285                                 }
    286                         })
    287                         .bind('remove', function() {
    288                                 return self.destroy();
    289                         });
     277                        .bind('setData.' + name, this._handleData)
     278                        .bind('getData.' + name, this._handleData)
     279                        .bind('remove', this._handleRemove);
    290280        };
    291281
    292282        // add widget prototype
    293         $[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype);
     283        $[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype, {
     284                _handleData : function(e, k, v){
     285                        var instance = $.data(e.target, name);
     286                        if (instance)
     287                                return instance[ v ? '_setData' : '_getData' ](k,v);
     288                },
     289                _handleRemove : function(e) {
     290                        var instance = $.data(e.target, name);
     291                        if (!instance) return null;
     292                       
     293                        var result = instance.destroy();
     294           
     295            // default
     296                         instance.element
     297                                .removeData(instance.widgetName)
     298                                .unbind('.' + instance.widgetName)
     299                               
     300                        return result;
     301                }
     302        });
    294303};
    295304
    296305$.widget.prototype = {