summaryrefslogtreecommitdiff
path: root/StoneIsland/www/js/vendor/view/serializable.js
diff options
context:
space:
mode:
Diffstat (limited to 'StoneIsland/www/js/vendor/view/serializable.js')
-rw-r--r--StoneIsland/www/js/vendor/view/serializable.js63
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