diff options
Diffstat (limited to 'StoneIsland/www/js/vendor/view/serializable.js')
| -rw-r--r-- | StoneIsland/www/js/vendor/view/serializable.js | 63 |
1 files changed, 59 insertions, 4 deletions
diff --git a/StoneIsland/www/js/vendor/view/serializable.js b/StoneIsland/www/js/vendor/view/serializable.js index 91d84997..4ad5558f 100644 --- a/StoneIsland/www/js/vendor/view/serializable.js +++ b/StoneIsland/www/js/vendor/view/serializable.js @@ -1,13 +1,68 @@ var SerializableView = View.extend({ serialize: function(){ - var fd = new FormData(), hasCSRF = false - + var fields = {} this.$("input[name], select[name], textarea[name]").each( function(){ - fd.append(this.name, this.value) + fields[this.name] = this.value + }) + return fields + }, + + deserialize: function(data){ + this.$("input[name], textarea[name]").val("") + Object.keys(data).forEach(function(k){ + this.$("[" + k + "]").val(data[k]) + }) + }, + + validate: function(data){ + var errors = [] + var presence_msgs = this.validate_presence + Object.keys(presence_msgs).forEach(function(k){ + if (! data[k]) errors.push( [ k, presence_msgs[k] ] ) }) + return errors.length ? errors : null + }, + + show_errors: function(errors){ + var msgs = [] + errors.forEach(function(e){ + this.$("[name=" + e[0] + "]").addClass('error_hilite') + msgs.push(e[1]) + }.bind(this)) + this.$msg.html(msgs.join("<br>")) + }, + + hide_errors: function(){ + this.$msg.html("") + }, + + save: function(e){ + e && e.preventDefault() + + var data = this.serialize() + var errors = this.validate(data) + if (errors) { + this.show_errors(errors) + return + } + else { + this.hide_errors() + } - return fd + this.action({ + data: data, + success: this.success.bind(this), + error: this.error.bind(this), + }) }, + success: function(data){ + console.log("SUCCESS", data) + }, + + error: function(data){ + console.log("FAIL", data) + }, + })
\ No newline at end of file |
