OSDN Git Service

fix:
[pettanr/pettanr.git] / app / assets / javascripts / pettanr / inspire.js.coffee
1 class Pettanr.Inspire\r
2   \r
3   constructor: (@item) ->\r
4     _.extend(this, Backbone.Events)\r
5   \r
6   go: (context, options) -> \r
7     @item = @item.with_elements() # retake panel for 'with_elements' mode\r
8     @item.fetch({cache: false}).done =>\r
9       @item.attributes = @item.replaced_attributes()\r
10       delete @item.attributes['id']\r
11       @item.overwrite({})\r
12       @set_root()\r
13       @set_elements()\r
14       @save(context, options)\r
15   \r
16   set_root: () ->\r
17     @root_form = Locmare.Form.factory({\r
18       form_name: @item.item_name(), \r
19       use_name: 'default' \r
20       item: @item, \r
21       submit: 'default' \r
22     })\r
23   \r
24   set_elements: () ->\r
25     @element_forms = _.map @item.zorderd_elements(), (element) =>\r
26       form = Locmare.Form.factory({\r
27         form_name: element.item_name(), \r
28         use_name: 'default' \r
29         item: element, \r
30         element_form: true, \r
31         submit: null, \r
32       })\r
33       form.add_elements()\r
34       form\r
35   \r
36   save: (context, options) ->\r
37     # merge panel and elements\r
38     attrs = @root_form.save_data()\r
39     delete attrs['id']\r
40     _.extend(attrs, @elements_save_data())\r
41     # save json data by panel form\r
42     new_panel = new Pettanr.Panel.WithElements()\r
43     new_form = Locmare.Form.factory({\r
44       form_name: new_panel.item_name(), \r
45       use_name: 'default' \r
46       item: new_panel, \r
47       submit: 'default' \r
48     })\r
49     success = (model, response) ->\r
50       options.success.call(context, model)\r
51     fail = (model, response) ->\r
52       options.fail.call(context, response)\r
53     @listenTo(new_form, 'success', success)\r
54     @listenTo(new_form, 'fail', fail)\r
55     new_form.save(attrs)\r
56   \r
57   elements_save_data: () ->\r
58     attrs = {}\r
59     _.each @element_forms, (element_form) =>\r
60       mm = @item.my_class().my_manifest()\r
61       em = element_form.item.my_class().my_manifest()\r
62       child_element_name = mm.associations.child_element_name(element_form.item.my_class())\r
63       if mm.associations.is_has_one(em)\r
64         name = element_form.item.item_name() + '_attributes'\r
65         d = element_form.save_data(true)\r
66         delete d['id']\r
67         delete d['panel_id']\r
68         attrs[name] = d\r
69       else\r
70         name = element_form.item.table_name() + '_attributes'\r
71         attrs[name] ||= []\r
72         d = element_form.save_data(true)\r
73         delete d['id']\r
74         delete d['panel_id']\r
75         attrs[name].push(d)\r
76     attrs\r
77   \r