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): ?>
-
+
+
+