summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/basic/basic_controller.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src/js/views/basic/basic_controller.js')
-rw-r--r--addons/web/static/src/js/views/basic/basic_controller.js35
1 files changed, 35 insertions, 0 deletions
diff --git a/addons/web/static/src/js/views/basic/basic_controller.js b/addons/web/static/src/js/views/basic/basic_controller.js
index 5293ee6f4b6..7beb15a9d70 100644
--- a/addons/web/static/src/js/views/basic/basic_controller.js
+++ b/addons/web/static/src/js/views/basic/basic_controller.js
@@ -88,6 +88,41 @@ return AbstractController.extend(FieldManagerMixin, {
//--------------------------------------------------------------------------
/**
+ * When the user clicks on a 'action button', this function determines what
+ * should happen.
+ *
+ * @private
+ * @param {Object} attrs the attrs of the button clicked
+ * @param {Object} [record] the current state of the view
+ * @returns {Deferred}
+ */
+ _callButtonAction: function (attrs, record) {
+ var self = this;
+ var def = $.Deferred();
+ var reload = function () {
+ if (!self.isDestroyed()) {
+ self.reload();
+ }
+ };
+ record = record || this.model.get(this.handle);
+ var recordID = record.data.id;
+ this.trigger_up('execute_action', {
+ action_data: _.extend({}, attrs, {
+ context: record.getContext({additionalContext: attrs.context}),
+ }),
+ model: record.model,
+ record_id: recordID,
+ on_closed: function (reason) {
+ if (!_.isObject(reason)) {
+ reload();
+ }
+ },
+ on_fail: reload,
+ on_success: def.resolve.bind(def),
+ });
+ return this.alive(def);
+ },
+ /**
* Called by the field manager mixin to confirm that a change just occured
* (after that potential onchanges have been applied).
*