OSDN Git Service

fix:panel elm play
[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.edit({\r
8       context: this, \r
9       success: (@item) ->\r
10         @item.boosts 'post'\r
11         delete @item.attributes['id']\r
12         @item.overwrite({})\r
13         @set_root()\r
14         @set_elements()\r
15         @save(context, options)\r
16     })\r
17   \r
18   set_root: () ->\r
19     @root_form = Locmare.Form.factory({\r
20       form_name: @item.item_name(), \r
21       use_name: 'default' \r
22       item: @item, \r
23       submit: 'default' \r
24     })\r
25   \r
26   set_elements: () ->\r
27     @element_forms = _.map @item.zorderd_elements(), (element) =>\r
28       form = Locmare.Form.factory({\r
29         form_name: element.item_name(), \r
30         use_name: 'default' \r
31         item: element, \r
32         element_form: true, \r
33         submit: null, \r
34       })\r
35       form.add_elements()\r
36       form\r
37   \r
38   save: (context, options) ->\r
39     # merge panel and elements\r
40     attrs = @root_form.save_data()\r
41     delete attrs['id']\r
42     _.extend(attrs, @elements_save_data())\r
43     # save json data by panel form\r
44     new_panel = new Pettanr.Panel.Edit()\r
45     new_form = Locmare.Form.factory({\r
46       form_name: new_panel.item_name(), \r
47       use_name: 'default' \r
48       item: new_panel, \r
49       submit: 'default' \r
50     })\r
51     success = (model, response) ->\r
52       options.success.call(context, model)\r
53     fail = (model, response) ->\r
54       options.fail.call(context, response)\r
55     @listenTo(new_form, 'success', success)\r
56     @listenTo(new_form, 'fail', fail)\r
57     new_form.save(attrs)\r
58   \r
59   elements_save_data: () ->\r
60     attrs = {}\r
61     _.each @element_forms, (element_form) =>\r
62       mm = @item.my_class().my_manifest()\r
63       em = element_form.item.my_class().my_manifest()\r
64       child_element_name = mm.associations.child_element_name(element_form.item.my_class())\r
65       if mm.associations.is_has_one(em)\r
66         name = element_form.item.item_name() + '_attributes'\r
67         d = element_form.save_data(true)\r
68         delete d['id']\r
69         delete d['panel_id']\r
70         attrs[name] = d\r
71       else\r
72         name = element_form.item.table_name() + '_attributes'\r
73         attrs[name] ||= []\r
74         d = element_form.save_data(true)\r
75         delete d['id']\r
76         delete d['panel_id']\r
77         attrs[name].push(d)\r
78     attrs\r
79   \r