Skip to content
Slava Oliyanchuk edited this page Feb 11, 2016 · 2 revisions

BEMTREE

TBD

Особенность работы this.reapply()

Рассмотрим пример:

// Шаблоны
block('b1').content()(function() {
  this.wtf = 'fail';
  return this.reapply({ block: 'b2' });
});
block('b2').content()(function() {
  return this.wtf || 'ok';
});
// BEMJSON
{ block: 'b1' }
// Результат шаблонизации:
{ block: 'b1', content: { block: 'b2', content: 'fail' } }

this.reapply() возвращает { block: 'b2', content: 'ok' } как и должен. Затем этот объект передается в .renderContent, но с this от b1, который содержит this.wtf равный fail. renderContent рендерит контент как fail в соответствии с вторым шаблоном в примере.

Так что эта особенность: ожидаемое поведение. Вы возвращаете объект с BEMJSON и если в контент моде используется this, то шаблоны будут обращаться к нему как к BEMJSON для рендеринга содержимого.

Эта разница в работе reapply в BEMHTML и BEMTREE из-за того, что в BEMHTML reapply возвращает строку, а в BEMTREE — объект BEMJSON.

См issue #126 и #189