diff --git a/modules/backend/formwidgets/RecordFinder.php b/modules/backend/formwidgets/RecordFinder.php index 400853c7f..6e7019002 100644 --- a/modules/backend/formwidgets/RecordFinder.php +++ b/modules/backend/formwidgets/RecordFinder.php @@ -123,6 +123,10 @@ class RecordFinder extends FormWidgetBase 'recordsPerPage', ]); + if ($this->formField->disabled) { + $this->previewMode = true; + } + if (post('recordfinder_flag')) { $this->listWidget = $this->makeListWidget(); $this->listWidget->bindToController(); @@ -160,6 +164,15 @@ class RecordFinder extends FormWidgetBase return ['#'.$this->getId('container') => $this->makePartial('recordfinder')]; } + public function onClearRecord() + { + list($model, $attribute) = $this->resolveModelAttribute($this->valueFrom); + $model->{$attribute} = null; + + $this->prepareVars(); + return ['#'.$this->getId('container') => $this->makePartial('recordfinder')]; + } + /** * Prepares the list data */ diff --git a/modules/backend/formwidgets/recordfinder/assets/js/recordfinder.js b/modules/backend/formwidgets/recordfinder/assets/js/recordfinder.js index f5ddea208..640725219 100644 --- a/modules/backend/formwidgets/recordfinder/assets/js/recordfinder.js +++ b/modules/backend/formwidgets/recordfinder/assets/js/recordfinder.js @@ -21,29 +21,43 @@ // ============================ var RecordFinder = function(element, options) { - this.options = options this.$el = $(element) + this.options = options || {} + $.oc.foundation.controlUtils.markDisposable(element) Base.call(this) this.init() } - RecordFinder.prototype = Object.create(BaseProto) RecordFinder.prototype.constructor = RecordFinder + RecordFinder.prototype.init = function() { + this.$el.on('dblclick', this.proxy(this.onDoubleClick)) + this.$el.one('dispose-control', this.proxy(this.dispose)) + } + + 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 = null + + // In some cases options could contain callbacks, + // so it's better to clean them up too. + this.options = null + + BaseProto.dispose.call(this) + } + RecordFinder.DEFAULTS = { refreshHandler: null, dataLocker: null } - RecordFinder.prototype.init = function() { - var self = this - this.$el.on('dblclick', function () { - $('.btn.find-record', self.$el).trigger('click') - }) - - this.$el.on('click', '.clear-record', this.proxy(this.clearRecord)) + RecordFinder.prototype.onDoubleClick = function(linkEl, recordId) { + $('.btn.find-record', this.$el).trigger('click') } RecordFinder.prototype.updateRecord = function(linkEl, recordId) { @@ -59,13 +73,7 @@ } }) - if(linkEl){ - $(linkEl).closest('.recordfinder-popup').popup('hide') - } - } - - RecordFinder.prototype.clearRecord = function() { - this.updateRecord(false, '') + $(linkEl).closest('.recordfinder-popup').popup('hide') } // RECORDFINDER PLUGIN DEFINITION diff --git a/modules/backend/formwidgets/recordfinder/partials/_recordfinder.htm b/modules/backend/formwidgets/recordfinder/partials/_recordfinder.htm index 27ab401da..f70823bed 100644 --- a/modules/backend/formwidgets/recordfinder/partials/_recordfinder.htm +++ b/modules/backend/formwidgets/recordfinder/partials/_recordfinder.htm @@ -16,11 +16,16 @@ previewMode): ?> - + + +