_.each @elements_items(), (item) =>\r
item.boosts(level) if item\r
\r
- replaced_attributes: () ->\r
+ replaced_attributes: (options = {}) ->\r
attributes = {}\r
_.each @attributes, (attribute, name) =>\r
replaced = if _.isArray(attribute)\r
# has many association\r
model = @my_class().my_manifest().associations.has_many[name].model()\r
_.map attribute, (attr) =>\r
- child = @replace_element(model, attr)\r
- child.attributes = child.replaced_attributes()\r
+ child = if options.hold\r
+ @replace_and_hold_element(model, attr)\r
+ else\r
+ @replace_element(model, attr)\r
+ child.attributes = child.replaced_attributes(options)\r
child\r
else if _.isObject(attribute)\r
# has one association\r
model = @my_class().my_manifest().associations.has_one[name].model()\r
- child = @replace_element(model, attribute)\r
- child.attributes = child.replaced_attributes()\r
+ child = if options.hold\r
+ @replace_and_hold_element(model, attribute)\r
+ else\r
+ @replace_element(model, attribute)\r
+ child.attributes = child.replaced_attributes(options)\r
child\r
else\r
attribute\r
Pettanr.cache.store(empty_child) if !cached_child\r
cached_child || empty_child\r
\r
+ replace_and_hold_element: (model, attr) ->\r
+ empty_child = new model(attr)\r
+ cached_child = Pettanr.cache.restore(empty_child)\r
+ item = if cached_child\r
+ cached_child\r
+ else\r
+ Pettanr.cache.store(empty_child) \r
+ holden = item.hold()\r
+ holden.attributes = attr\r
+ holden\r
+ \r
+ hold: () ->\r
+ super()\r
+ \r
+ fix: () ->\r
+ super()\r
+ @fix_elements()\r
+ \r
+ release: () ->\r
+ super()\r
+ @release_elements()\r
+ \r
+ release_elements: () ->\r
+ _.each @attributes, (elements, name) =>\r
+ if _.isArray(elements)\r
+ # has many association\r
+ model = @my_class().my_manifest().associations.has_many[name].model()\r
+ _.each elements, (element) =>\r
+ element.release()\r
+ else if _.isObject(elements)\r
+ # has one association\r
+ elements.release()\r
+ \r
+ fix_elements: () ->\r
+ _.each @attributes, (elements, name) =>\r
+ if _.isArray(elements)\r
+ # has many association\r
+ model = @my_class().my_manifest().associations.has_many[name].model()\r
+ _.each elements, (element) =>\r
+ element.fix()\r
+ else if _.isObject(elements)\r
+ # has one association\r
+ elements.fix()\r
+ \r