diff options
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.js | 35 |
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). * |
