From a765ff503d3d60eb1dbc3a2c175b60fcafdcd083 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Sun, 23 Apr 2017 13:51:52 +0200 Subject: [FIX] web: reload list view after button action Before this commit, the code that handled buttons in list view was kind of simple, and did not reload the view after. But clicking on action button is not only a problem for the list view, the form view already had something in the controller doing exactly that. With this commit, we move that code to the basic controller, and use the method in the list view. --- .../static/src/js/views/basic/basic_controller.js | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'addons/web/static/src/js/views/basic/basic_controller.js') 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 @@ -87,6 +87,41 @@ return AbstractController.extend(FieldManagerMixin, { // Private //-------------------------------------------------------------------------- + /** + * 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). -- cgit v1.2.3