OSDN Git Service

fix form saving
[pettanr/pettanr.git] / app / assets / javascripts / locmare / form.js.coffee
index cd2a8e1..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
@@ -82,14 +83,22 @@ class Locmare.Form extends Locmare.FormBase
     this\r
   \r
   add_element: (element) ->\r
-    form = new Locmare.Form(\r
-      element.item_name(), \r
-      element, \r
-      @mounted, \r
-      null, \r
-      @operators\r
-    )\r
-    this.$el.append( form.render().el)\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
@@ -139,12 +148,29 @@ class Locmare.Form extends Locmare.FormBase
     _.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