class Peta.ElementNestableContent extends Peta.Content\r
element_items: (element_model) ->\r
n = @my_class().my_manifest().associations.child_element_name(element_model)\r
- @my_class()[n]()\r
+ @get(n)\r
\r
elements_items: () ->\r
- _this = this\r
- r = _.map @my_class().child_models, (element_model) ->\r
- _this.element_items(element_model)\r
- _.flatten(r)\r
+ r = _.map @my_class().child_models(), (element_model) =>\r
+ @element_items(element_model)\r
+ _.compact(_.flatten(r))\r
\r
boosts: (level) ->\r
super(level)\r
- _.each @elements_items(), (item) ->\r
- item.boosts(level)\r
+ _.each @elements_items(), (item) =>\r
+ item.boosts(level) if item\r
+ \r
+ replaced_attributes: () ->\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\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\r
+ else\r
+ attribute\r
+ attributes[name] = replaced\r
+ attributes\r
+ \r
+ replace_element: (model, attr) ->\r
+ empty_child = new model(attr)\r
+ cached_child = Pettanr.cache.restore(empty_child)\r
+ Pettanr.cache.store(empty_child) if !cached_child\r
+ cached_child || empty_child\r
\r