OSDN Git Service

fix form saving
[pettanr/pettanr.git] / app / assets / javascripts / locmare / form.js.coffee
index bf40a9d..aa77ed3 100644 (file)
@@ -54,6 +54,7 @@ class Locmare.Form extends Locmare.FormBase
     super(options)\r
     @submit = options.submit\r
     @action = options.action\r
+    @child_forms = {}\r
     @item.boosts 'post'\r
     @init_fields()\r
   \r
@@ -81,29 +82,47 @@ class Locmare.Form extends Locmare.FormBase
       @delegateEvents({'submit': method_type})\r
     this\r
   \r
+  add_element: (element) ->\r
+    form = Locmare.Form.factory({\r
+      form_name: element.item_name(), \r
+      item: element, \r
+      mounted: @mounted, \r
+      submit: null, \r
+      operators: @operators,\r
+      action: '/' + element.table_name() + '/' + Pettanr.to_s(element.get('id'))\r
+    })\r
+    this.$el.append(form.render().el)\r
+    mm = @item.my_class().my_manifest()\r
+    em = element.my_class().my_manifest()\r
+    if mm.associations.is_has_one(em)\r
+      @child_forms[element.item_name()] = form\r
+    else\r
+      @child_forms[element.table_name()] ||= []\r
+      @child_forms[element.table_name()].push(form)\r
+    form\r
+  \r
   init_fields: () ->\r
-    _this = this\r
-    _.each _this.manifest.field_names, (field_name) ->\r
-      field_manifest = _this.manifest.fields[field_name]\r
-      boost_name = _this.item.my_class().find_boost_name(field_name)\r
+    _.each @manifest.field_names, (field_name) =>\r
+      field_manifest = @manifest.fields[field_name]\r
+      boost_name = @item.my_class().find_boost_name(field_name)\r
       extend_model = if boost_name \r
-        _this.item.boosters[boost_name].extend_model()\r
+        @item.boosters[boost_name].extend_model()\r
       else\r
         null\r
       if boost_name and extend_model # field is extend setting AND template has a extend model\r
-        extend_form_name = _this.item.boosters[boost_name].item_name()\r
-        extend_item = _this.item.boosters[boost_name].extend_item()\r
-        _this.fields[field_name] = new Locmare.ExtendForm({\r
-          parent: _this, \r
+        extend_form_name = @item.boosters[boost_name].item_name()\r
+        extend_item = @item.boosters[boost_name].extend_item()\r
+        @fields[field_name] = new Locmare.ExtendForm({\r
+          parent: this, \r
           form_name: extend_form_name, \r
           item: extend_item, \r
-          mounted: _this.mounted, \r
-          operators: _this.operators, \r
+          mounted: @mounted, \r
+          operators: @operators, \r
           field_name: field_name\r
         })\r
       else\r
-        _this.fields[field_name] = new Locmare.FormModule.Field({\r
-          form: _this, \r
+        @fields[field_name] = new Locmare.FormModule.Field({\r
+          form: this, \r
           field_name: field_name, \r
           field_manifest: field_manifest\r
         })\r
@@ -117,9 +136,8 @@ class Locmare.Form extends Locmare.FormBase
     @submits()[@submit]\r
   \r
   post: () ->\r
-    _this = this\r
-    _.each @fields, (field) ->\r
-      _this.item.set(field.field_name, field.val())\r
+    _.each @fields, (field) =>\r
+      @item.set(field.field_name, field.val())\r
     if @item.save()\r
       window.router.navigate('/' + @item.table_name() + '/' + Pettanr.to_s(@item.get('id')), true)\r
       return false\r
@@ -127,16 +145,32 @@ class Locmare.Form extends Locmare.FormBase
       alert('invalid')\r
   \r
   put: () ->\r
-    _this = this\r
-    _.each @fields, (field) ->\r
-      _this.item.set(field.field_name, field.val())\r
+    _.each @fields, (field) =>\r
+      @item.set(field.field_name, field.val())\r
     @item.overwrite({operators: @operators})\r
-    if @item.save()\r
+    attrs = @make_attrs()\r
+    if @item.save(attrs)\r
       window.router.navigate('/' + @item.table_name() + '/' + Pettanr.to_s(@item.get('id')), true)\r
       return false\r
     else\r
       alert('invalid')\r
   \r
+  save_data: () ->\r
+    @item.my_class().child_models()\r
+    attrs = {}\r
+    _.each @fields, (field) =>\r
+      attrs[field.field_name] = @item.get(field.field_name)\r
+    _.each @child_forms, (child_form, name) =>\r
+      mm = @item.my_class().my_manifest()\r
+      em = child_form.item.my_class().my_manifest()\r
+      if mm.associations.is_has_one(em)\r
+        attrs[name + '_attributes'] = child_form.save_data()\r
+      else\r
+        attrs[name + '_attributes'] = []\r
+        _.each child_form, (form) =>\r
+          attrs[name + '_attributes'].push(form.save_data())\r
+    attrs\r
+  \r
 class Locmare.ExtendForm extends Locmare.FormBase\r
   tagName: 'div'\r
   className: 'fields'\r
@@ -162,11 +196,10 @@ class Locmare.ExtendForm extends Locmare.FormBase
     this\r
   \r
   init_fields: () ->\r
-    _this = this\r
-    _.each _this.manifest.field_names, (field_name) ->\r
-      field_manifest = _this.manifest.fields[field_name]\r
-      _this.fields[field_name] = new Locmare.FormModule.ExtendField({\r
-        form: _this, \r
+    _.each @manifest.field_names, (field_name) =>\r
+      field_manifest = @manifest.fields[field_name]\r
+      @fields[field_name] = new Locmare.FormModule.ExtendField({\r
+        form: this, \r
         field_name: field_name, \r
         field_manifest: field_manifest\r
       })\r
@@ -186,10 +219,9 @@ class Locmare.FormModule.Fields extends Backbone.View
   \r
   render: () ->\r
     this.$el.html('')\r
-    _this = this\r
-    _.each @fields, (field) ->\r
-      _this.$el.append(field.render().el)\r
-      _this.$el.append(field.rb.render().el) if field.rb\r
+    _.each @fields, (field) =>\r
+      this.$el.append(field.render().el)\r
+      this.$el.append(field.rb.render().el) if field.rb\r
     this\r
   \r
 class Locmare.FormModule.SubmitModule\r