[ADD] sync-on-start tutoring
bzr revid: xmo@openerp.com-20130215131950-df68dpp0iz3dhdte
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
+ $('<li>')
|
||||
+ .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 @@
|
||||
<p class="oe_web_example_stop">
|
||||
<button type="button">Stop</button>
|
||||
</p>
|
||||
+ <ol class="oe_web_example_saved"></ol>
|
||||
</div>
|
||||
</templates>
|
||||
@@ -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) {
|
||||
@@ -15,3 +15,5 @@
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
|
||||
Reference in New Issue
Block a user