class Pettanr.Inspire constructor: (@item) -> _.extend(this, Backbone.Events) go: (context, options) -> @item.edit({ context: this, success: (@item) -> @item.boosts 'post' delete @item.attributes['id'] @item.overwrite({}) @set_root() @set_elements() @save(context, options) fail: (model, response) -> options.fail.call(context, response) }) set_root: () -> @root_form = Locmare.Form.factory({ form_name: @item.item_name(), use_name: 'default' item: @item, submit: 'default' }) set_elements: () -> @element_forms = _.map @item.zorderd_elements(), (element) => form = Locmare.Form.factory({ form_name: element.item_name(), use_name: 'default' item: element, element_form: true, submit: null, }) form.add_elements() form save: (context, options) -> # merge panel and elements attrs = @root_form.save_data() delete attrs['id'] _.extend(attrs, @elements_save_data()) # save json data by panel form new_panel = new Pettanr.Panel.Edit() new_form = Locmare.Form.factory({ form_name: new_panel.item_name(), use_name: 'default' item: new_panel, submit: 'default' }) success = (model, response) -> options.success.call(context, model) fail = (model, response) -> options.fail.call(context, response) @listenTo(new_form, 'success', success) @listenTo(new_form, 'fail', fail) new_form.save(attrs) elements_save_data: () -> attrs = {} _.each @element_forms, (element_form) => mm = @item.my_class().my_manifest() em = element_form.item.my_class().my_manifest() child_element_name = mm.associations.child_element_name(element_form.item.my_class()) if mm.associations.is_has_one(em) name = element_form.item.item_name() + '_attributes' d = element_form.save_data(true) delete d['id'] delete d['panel_id'] attrs[name] = d else name = element_form.item.table_name() + '_attributes' attrs[name] ||= [] d = element_form.save_data(true) delete d['id'] delete d['panel_id'] attrs[name].push(d) attrs