diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-12-11 16:44:01 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-12-11 16:44:01 +0200 |
commit | 6439c5d52ae5771341902bcf28b7e06af94d5389 (patch) | |
tree | d75afaa2ef11b743a46617b5c22d611d68972650 | |
parent | 97703f26017aff4dcd3435fdc612719b040278c6 (diff) | |
download | aconf-6439c5d52ae5771341902bcf28b7e06af94d5389.tar.bz2 aconf-6439c5d52ae5771341902bcf28b7e06af94d5389.tar.xz |
web client: postpone validation until request completes
-rw-r--r-- | web/client.js | 51 |
1 files changed, 29 insertions, 22 deletions
diff --git a/web/client.js b/web/client.js index 3497039..b3261cb 100644 --- a/web/client.js +++ b/web/client.js @@ -513,7 +513,8 @@ $(function() { this.makeEl(); var self = this; - this.request = this.requestData(value, meta) + + var request = this.requestData(value, meta) .done(function(value, meta) { self.render(value, meta); self.setStatus(status); @@ -534,8 +535,14 @@ $(function() { this.wrapped.append(link); } + function validate() { + request.done(function(value) { + self.validate(value); + }); + } + this.wrapped.on("start", function(event) { - if (data.status(name) == "invalid") self.validate(); + if (data.status(name) == "invalid") validate(); else self.setVisible(); event.stopPropagation(); }); @@ -543,7 +550,7 @@ $(function() { this.wrapped.on("updated", function(event, field) { if (!field || (meta.condition && field in meta.condition)) - self.validate(); + validate(); event.stopPropagation(); }); @@ -573,7 +580,7 @@ $(function() { this.wrapped.trigger("setVisible", [this.visible]); }, - validate: function() { this.setVisible(); } + validate: function(value) { this.setVisible(); } }; @@ -596,7 +603,7 @@ $(function() { ); if (this.editable) - this.field.change(_.bind(this.validate, this)); + this.field.change(_.bind(this.validateChange, this)); return el; }, @@ -624,10 +631,13 @@ $(function() { return td; }, - validate: function() { - this.super(Field, "validate"); + validate: function(value) { + this.super(Field, "validate", value); if (!this.visible || !this.editable) return; - + this.validateChange(); + }, + + validateChange: function() { this.msg.text("[checking]"); statusBar.setError("Validating changes", "validate"); @@ -830,22 +840,19 @@ $(function() { wrap: function() { return this.el; }, - validate: function() { - this.super(Inline, "validate"); + validate: function(data) { + this.super(Inline, "validate", data); - var self = this; - this.request.done(function(data, meta) { - if (self.data.match(self.meta.condition)) { - var valid = data.validate(); - self.setStatus(data.status()); - statusBar.validationReady(valid); - } + if (this.data.match(this.meta.condition)) { + var valid = data.validate(); + this.setStatus(data.status()); + statusBar.validationReady(valid); + } - if (self.fields) - _.each(self.fields, function(field) { - field.trigger("updated"); - }); - }); + if (this.fields) + _.each(this.fields, function(field) { + field.trigger("updated"); + }); } }); |