bem-site / bem-forum-content-ru

Content BEM forum for Russian speak users
MIT License
56 stars 6 forks source link

Объясните доступно, что попадает в bemhtml шаблонах в свойство this, а что в this.ctx? #125

Open 4ok opened 9 years ago

4ok commented 9 years ago

Например я могу использовать как this.ctx.block, так и this.block для получения имя блока.

Еще не понятная история с data, например если передать в bemhtml свойство data:

{ block: 'some-block', data: 'some-data' }

, то оно будет находится как и в this.ctx.data так и в this.data

Но если передать свойство отличное от data:

{ block: 'some-block', anotherkey: 'some-data' }

, то оно будет находится только в свойстве this.ctx.anotherkey

voischev commented 9 years ago

подпишусь, хотя этот вопрос никогда не напрягал. практически всегда используем this.ctx.

4ok commented 9 years ago

Также использую только this.ctx, но все же интересно разобраться

4ok commented 9 years ago

UP!

Team, please help

veged commented 9 years ago

this.ctx это прямо ссылка на фрагмент входного bemjson отвечающего за текущую обрабатываемую сущность

если нужно получить информацию о БЭМ-свойствах текущего контекста (block, elem, mods, elemMods), то всегда правильно использовать this, где эти значения правильно поддерживаются (например, если во входном bemjson есть { elem: 'e1' }, без указания блока, то поле this.block будет вычислено по контексту)

история с this.ctx.data === this.data выглядит или как баг, или как частный случай (если какие-то шаблоны записывают в this.data ссылку на this.ctx.data), или как недосмотр — в общем случае, такого быть не должно

для доступа к кастомным полям (типа this.ctx.data и this.ctx.anotherkey) всегда нужно использовать this.ctx

4ok commented 9 years ago

@veged, спасибо за ответ)