72 lines
2.3 KiB
Diff
72 lines
2.3 KiB
Diff
# HG changeset patch
|
|
# User Cédric Krier <cedric.krier@b2ck.com>
|
|
Disable button during click processing
|
|
|
|
|
|
The click event must be blocked when the screen method is called to limit
|
|
double execution. A double execution is still possible if the execution of the
|
|
action, which is asynchronous, is not started fast enough.
|
|
|
|
issue5362
|
|
review17881002
|
|
|
|
Index: src/view/form.js
|
|
===================================================================
|
|
|
|
--- a/sao/src/view/form.js
|
|
+++ b/sao/src/view/form.js
|
|
@@ -361,7 +361,12 @@
|
|
},
|
|
button_clicked: function(event) {
|
|
var button = event.data;
|
|
- this.screen.button(button.attributes);
|
|
+ button.el.prop('disabled', true);
|
|
+ try {
|
|
+ this.screen.button(button.attributes);
|
|
+ } finally {
|
|
+ button.el.prop('disabled', false);
|
|
+ }
|
|
},
|
|
selected_records: function() {
|
|
if (this.screen.current_record) {
|
|
|
|
Index: src/view/tree.js
|
|
===================================================================
|
|
|
|
--- a/sao/src/view/tree.js
|
|
+++ b/sao/src/view/tree.js
|
|
@@ -1509,7 +1509,7 @@
|
|
},
|
|
render: function(record) {
|
|
var button = new Sao.common.Button(this.attributes);
|
|
- button.el.click(record, this.button_clicked.bind(this));
|
|
+ button.el.click([record, button], this.button_clicked.bind(this));
|
|
var fields = jQuery.map(this.screen.model.fields,
|
|
function(field, name) {
|
|
if ((field.description.loading || 'eager') ==
|
|
@@ -1526,7 +1526,8 @@
|
|
return button.el;
|
|
},
|
|
button_clicked: function(event) {
|
|
- var record = event.data;
|
|
+ var record = event.data[0];
|
|
+ var button = event.data[1];
|
|
if (record != this.screen.current_record) {
|
|
return;
|
|
}
|
|
@@ -1534,7 +1535,12 @@
|
|
if (states.invisible || states.readonly) {
|
|
return;
|
|
}
|
|
- this.screen.button(this.attributes);
|
|
+ button.el.prop('disabled', true);
|
|
+ try {
|
|
+ this.screen.button(this.attributes);
|
|
+ } finally {
|
|
+ button.el.prop('disabled', false);
|
|
+ }
|
|
}
|
|
});
|
|
|
|
|