diff --git a/addons/web/doc/module.rst b/addons/web/doc/module.rst index 02e0f9c250a..2e38733a25d 100644 --- a/addons/web/doc/module.rst +++ b/addons/web/doc/module.rst @@ -282,6 +282,27 @@ tools while playing with the stopwatch will show that the save (creation) request is indeed sent (and replied to, even though we're ignoring the response at this point). +These saved data should now be loaded and displayed when first opening +the action, so the user can see his previously recorded times. This is +done by overloading the model's ``start`` method: the purpose of +:js:func:`~openerp.base.Widget.start()` is to perform *asynchronous* +initialization steps, so the rest of the web client knows to "wait" +and gets a readiness signal. In this case, it will fetch the data +recorded previously using the :js:class:`~openerp.web.Query` interface +and add this data to an ordered list added to the widget's template: + +.. patch:: + +And for consistency's sake (so that the display a user leaves is +pretty much the same as the one he comes back to), newly created +records should also automatically be added to the list: + +.. patch:: + +Note that we're only displaying the record once we know it's been +saved from the database (the ``create`` call has returned without +error). + .. [#DOM-building] they are not alternative solutions: they work very well together. Templates are used to build "just DOM", sub-widgets are used to build DOM subsections diff --git a/addons/web/doc/module/20 b/addons/web/doc/module/20 new file mode 100644 index 00000000000..042ff28067c --- /dev/null +++ b/addons/web/doc/module/20 @@ -0,0 +1,64 @@ +Index: web_example/static/src/js/first_module.js +=================================================================== +--- web_example.orig/static/src/js/first_module.js ++++ web_example/static/src/js/first_module.js +@@ -11,20 +11,36 @@ openerp.web_example = function (instance + this._super.apply(this, arguments); + this._start = null; + this._watch = null; ++ this.model = new instance.web.Model('web_example.stopwatch'); ++ }, ++ start: function () { ++ var display = this.display_record.bind(this); ++ return this.model.query() ++ .filter([['user_id', '=', instance.session.uid]]) ++ .all().done(function (records) { ++ _(records).each(display); ++ }); + }, + current: function () { + // Subtracting javascript dates returns the difference in milliseconds + return new Date() - this._start; + }, +- update_counter: function (time) { ++ display_record: function (record) { ++ $('
  • ') ++ .text(this.format_time(record.time)) ++ .appendTo(this.$('.oe_web_example_saved')); ++ }, ++ format_time: function (time) { + var h, m, s; + s = time / 1000; + m = Math.floor(s / 60); + s -= 60*m; + h = Math.floor(m / 60); + m -= 60*h; +- this.$('.oe_web_example_timer').text( +- _.str.sprintf("%02d:%02d:%02d", h, m, s)); ++ return _.str.sprintf("%02d:%02d:%02d", h, m, s); ++ }, ++ update_counter: function (time) { ++ this.$('.oe_web_example_timer').text(this.format_time(time)); + }, + watch_start: function () { + this.$el.addClass('oe_web_example_started') +@@ -45,7 +61,7 @@ openerp.web_example = function (instance + this._start = this._watch = null; + this.$el.removeClass('oe_web_example_started') + .addClass('oe_web_example_stopped'); +- new instance.web.Model('web_example.stopwatch').call('create', [{ ++ this.model.call('create', [{ + user_id: instance.session.uid, + time: time, + }]); +Index: web_example/static/src/xml/web_example.xml +=================================================================== +--- web_example.orig/static/src/xml/web_example.xml ++++ web_example/static/src/xml/web_example.xml +@@ -7,5 +7,6 @@ +

    + +

    ++
      + + diff --git a/addons/web/doc/module/21 b/addons/web/doc/module/21 new file mode 100644 index 00000000000..0acfac9001d --- /dev/null +++ b/addons/web/doc/module/21 @@ -0,0 +1,27 @@ +Index: web_example/static/src/js/first_module.js +=================================================================== +--- web_example.orig/static/src/js/first_module.js ++++ web_example/static/src/js/first_module.js +@@ -55,16 +55,20 @@ openerp.web_example = function (instance + 33); + }, + watch_stop: function () { ++ var self = this; + clearInterval(this._watch); + var time = this.current(); + this.update_counter(time); + this._start = this._watch = null; + this.$el.removeClass('oe_web_example_started') + .addClass('oe_web_example_stopped'); +- this.model.call('create', [{ ++ var record = { + user_id: instance.session.uid, + time: time, +- }]); ++ }; ++ this.model.call('create', [record]).done(function () { ++ self.display_record(record); ++ }); + }, + destroy: function () { + if (this._watch) { diff --git a/addons/web/doc/module/series b/addons/web/doc/module/series index 119e58801de..6271f474f0b 100644 --- a/addons/web/doc/module/series +++ b/addons/web/doc/module/series @@ -15,3 +15,5 @@ 17 18 19 +20 +21