From 982bc43348a4cff3f5ce824417c9439e5fb8bb34 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Fri, 7 Apr 2017 07:48:04 +1000 Subject: [PATCH] Fixes recordfinder (again) Lots of complicated stuff going on here, all elements are getting wiped out when a record is updated and the control is getting disposed at the same time. We've created a dedicated variable to store the datalocker name as a string, this represents a small memory leak but a necessary one it seems. Fixes #2798 --- .../recordfinder/assets/js/recordfinder.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/modules/backend/formwidgets/recordfinder/assets/js/recordfinder.js b/modules/backend/formwidgets/recordfinder/assets/js/recordfinder.js index 5049cb65b..df6ff7efe 100644 --- a/modules/backend/formwidgets/recordfinder/assets/js/recordfinder.js +++ b/modules/backend/formwidgets/recordfinder/assets/js/recordfinder.js @@ -40,7 +40,7 @@ RecordFinder.prototype.dispose = function() { this.$el.off('dblclick', this.proxy(this.onDoubleClick)) this.$el.off('dispose-control', this.proxy(this.dispose)) - this.$el.removeData('oc.someDisposableControl') + this.$el.removeData('oc.recordfinder') this.$el = null @@ -62,15 +62,20 @@ RecordFinder.prototype.updateRecord = function(linkEl, recordId) { if (!this.options.dataLocker) return - var $locker = $(this.options.dataLocker) - $locker.val(recordId) + + // Selector name must be used because by the time success runs + // - this.options will be disposed + // - $locker element will be replaced + var locker = this.options.dataLocker + + $(locker).val(recordId) this.$el.loadIndicator({ opaque: true }) this.$el.request(this.options.refreshHandler, { success: function(data) { this.success(data) - $locker.trigger('change') + $(locker).trigger('change') } })