OSDN Git Service

fix: show's destroy button
[pettanr/pettanr.git] / app / assets / javascripts / locmare / form.js.coffee
index 7a01c1c..4e55865 100644 (file)
@@ -59,11 +59,7 @@ class Locmare.Form extends Locmare.FormBase
     @init_fields()\r
   \r
   render: () ->\r
-    @attr = {\r
-      method: @method_type(),\r
-      action: @action_url()\r
-    }\r
-    this.$el.attr(@attr)\r
+    this.$el.attr(@form_attr())\r
     this.$el.html('')\r
     @error_explanation = null\r
     @div_fields = new Locmare.FormModule.Fields({\r
@@ -71,14 +67,7 @@ class Locmare.Form extends Locmare.FormBase
     })\r
     #this.$el.append(@error_explanation.render().el) if not @error_explanation\r
     this.$el.append(@div_fields.render().el)\r
-    if @element_form\r
-      _.each @item.my_class().child_models(), (element_model) =>\r
-        items = @item.element_items(element_model)\r
-        if @item.my_class().my_manifest().associations.is_has_one(element_model)\r
-          @add_element(items)\r
-        else\r
-          _.each items, (item) =>\r
-            @add_element(item)\r
+    @add_elements() if @element_form\r
     if @submit\r
       c = @submit_class()\r
       @div_submit = new c({form: this})\r
@@ -86,6 +75,12 @@ class Locmare.Form extends Locmare.FormBase
       @delegateEvents({'submit': @method_type()})\r
     this\r
   \r
+  form_attr: () ->\r
+    {\r
+      method: @method_type(),\r
+      action: @action_url()\r
+    }\r
+  \r
   refresh: () ->\r
     _.each @fields, (field) =>\r
       field.refresh()\r
@@ -105,6 +100,15 @@ class Locmare.Form extends Locmare.FormBase
     else\r
       @item.edit_url()\r
   \r
+  add_elements: () ->\r
+    _.each @item.my_class().child_models(), (element_model) =>\r
+      items = @item.element_items(element_model)\r
+      if @item.my_class().my_manifest().associations.is_has_one(element_model)\r
+        @add_element(items)\r
+      else\r
+        _.each items, (item) =>\r
+          @add_element(item)\r
+  \r
   add_element: (element) ->\r
     form = Locmare.Form.factory({\r
       form_name: element.item_name(), \r
@@ -116,13 +120,19 @@ class Locmare.Form extends Locmare.FormBase
     this.$el.append(form.render().el)\r
     mm = @item.my_class().my_manifest()\r
     em = element.my_class().my_manifest()\r
+    child_element_name = mm.associations.child_element_name(element.my_class())\r
     if mm.associations.is_has_one(em)\r
-      @child_forms[element.item_name()] = form\r
+      @child_forms[child_element_name] = form\r
     else\r
-      @child_forms[element.table_name()] ||= []\r
-      @child_forms[element.table_name()].push(form)\r
+      @child_forms[child_element_name] ||= []\r
+      @child_forms[child_element_name].push(form)\r
     form\r
   \r
+  remove_elements: () ->\r
+    _.each @child_forms, (child_form, name) =>\r
+      child_form.item.set({_destroy: true}, {silent: true})\r
+      child_form.remove_elements()\r
+  \r
   init_fields: () ->\r
     _.each @manifest.field_names, (field_name) =>\r
       field_manifest = @manifest.fields[field_name]\r
@@ -177,28 +187,43 @@ class Locmare.Form extends Locmare.FormBase
     @item.save()\r
   \r
   success: (model, response) ->\r
-    if !Pettanr.cache.restore(@item.cache_key())\r
-      # entry item if item is new\r
-      Pettanr.cache.store(@item)\r
+    if !Pettanr.cache.restore(model.cache_key())\r
+      # item is new\r
+      model.url = model.default_url()\r
+      Pettanr.cache.store(model)\r
+    else\r
+      @item.fix()\r
     @trigger('success', model, response)\r
   \r
   fail: (model, response) ->\r
     @trigger('fail', response)\r
   \r
-  save_data: () ->\r
+  quit: () ->\r
+    @item.release()\r
+  \r
+  save_data: (inspire = false) ->\r
     @item.my_class().child_models()\r
     attrs = {}\r
     _.each @fields, (field) =>\r
       attrs[field.field_name] = @item.get(field.field_name)\r
+    delete attrs['id'] if @item.isNew()\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
+        d = child_form.save_data(inspire)\r
+        if inspire\r
+          delete d['id']\r
+          delete d[@item.item_name() + '_id']\r
+        attrs[name + '_attributes'] = d\r
       else\r
         attrs[name + '_attributes'] = []\r
         _.each child_form, (form) =>\r
-          attrs[name + '_attributes'].push(form.save_data())\r
+          d = form.save_data(inspire)\r
+          if inspire\r
+            delete d['id']\r
+            delete d[@item.item_name() + '_id']\r
+          attrs[name + '_attributes'].push(d)\r
     attrs\r
   \r
 class Locmare.ExtendForm extends Locmare.FormBase\r
@@ -220,11 +245,12 @@ class Locmare.ExtendForm extends Locmare.FormBase
   \r
   render: () ->\r
     this.$el.html('')\r
-    this.$el.append(@label.render().el) if not @label.hidden()\r
-    @div_fields = new Locmare.FormModule.Fields({\r
-      fields: @fields\r
-    })\r
-    this.$el.append(@div_fields.render().el)\r
+    if !@is_hidden()\r
+      this.$el.append(@label.render().el) if not @label.hidden()\r
+      @div_fields = new Locmare.FormModule.Fields({\r
+        fields: @fields\r
+      })\r
+      this.$el.append(@div_fields.render().el)\r
     this\r
   \r
   refresh: () ->\r
@@ -245,6 +271,9 @@ class Locmare.ExtendForm extends Locmare.FormBase
   val: () ->\r
     JSON.stringify(@item.attributes)\r
   \r
+  is_hidden: () ->\r
+    _.isEmpty(@manifest.field_names)\r
+  \r
   init_fields: () ->\r
     _.each @manifest.field_names, (field_name) =>\r
       field_manifest = @manifest.fields[field_name]\r