summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/abstract_model.js
diff options
context:
space:
mode:
authorGéry Debongnie <ged@odoo.com>2017-03-05 10:05:56 +0100
committerAaron Bohy <aab@odoo.com>2017-04-11 19:44:38 +0200
commit905e01921f3c3ef43ace6fc537d1d8c0d280002c (patch)
tree265c43ab21c5401a5d9f0f3d64d86f1ac417451c /addons/web/static/src/js/views/abstract_model.js
parent54d4c73af4ad05c7640d28c1892247c9538b8017 (diff)
[REF] web, *: redesign all JS views
This commit introduce a full redesign of all JS views. We started basically from scratch. The goal was to unify all the various views under a common framework, to make them testable, to make then usable in different conditions (in studio, or in the frontend), and to make our lives easier. Some important points are: - we introduced new coding guidelines (camelCase, 80 chars width, ...) - we have a brand new testing framework (still QUnit based) - kanban view moved to the web addon - calendar view (formerly web_calender) moved to web as well - the tree view was removed - all new code should be documented We hope that this code is the start of a new era for the Odoo web client, we want to have a high quality codebase, well documented, well tested, well designed. Work done by the framework team: mostly aab, ged, chm, dmo, qsm
Diffstat (limited to 'addons/web/static/src/js/views/abstract_model.js')
-rw-r--r--addons/web/static/src/js/views/abstract_model.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/addons/web/static/src/js/views/abstract_model.js b/addons/web/static/src/js/views/abstract_model.js
new file mode 100644
index 00000000000..78aa595a398
--- /dev/null
+++ b/addons/web/static/src/js/views/abstract_model.js
@@ -0,0 +1,69 @@
+odoo.define('web.AbstractModel', function (require) {
+"use strict";
+
+/**
+ * An AbstractModel is the M in MVC. We tend to think of MVC more on the server
+ * side, but we are talking here on the web client side.
+ *
+ * The duties of the Model are to fetch all relevant data, and to make them
+ * available for the rest of the view. Also, every modification to that data
+ * should pass through the model.
+ *
+ * Note that the model is not a widget, it does not need to be rendered or
+ * appended to the dom. However, it inherits from the EventDispatcherMixin,
+ * in order to be able to notify its parent by bubbling events up.
+ */
+
+var Class = require('web.Class');
+var mixins = require('web.mixins');
+
+var AbstractModel = Class.extend(mixins.EventDispatcherMixin, mixins.ServicesMixin, {
+ /**
+ * @param {Widget} parent
+ */
+ init: function (parent) {
+ mixins.EventDispatcherMixin.init.call(this);
+ this.setParent(parent);
+ },
+
+ //--------------------------------------------------------------------------
+ // Public
+ //--------------------------------------------------------------------------
+
+ /**
+ * This method should return the complete state necessary for the renderer
+ * to display the currently viewed data.
+ *
+ * @returns {*}
+ */
+ get: function () {
+ },
+ /**
+ * The load method is called once in a model, when we load the data for the
+ * first time. The method returns (a deferred that resolves to) some kind
+ * of token/handle. The handle can then be used with the get method to
+ * access a representation of the data.
+ *
+ * @param {Object} params
+ * @param {string} params.modelName the name of the model
+ * @returns {Deferred} The deferred resolves to some kind of handle
+ */
+ load: function (params) {
+ return $.when();
+ },
+ /**
+ * When something changes, the data may need to be refetched. This is the
+ * job for this method: reloading (only if necessary) all the data and
+ * making sure that they are ready to be redisplayed.
+ *
+ * @param {Object} params
+ * @returns {Deferred}
+ */
+ reload: function (params) {
+ return $.when();
+ },
+});
+
+return AbstractModel;
+
+});