Написал такое:
var title = 'my long title';
block('page').elem('title').content()(function(){ return title });
block('kg-appbar').elem('title').content()(function(){ return title });
Не сработало, т.к. переменная и шаблоны разъехались в разные области видимости после компиляции. Есть решение или мне не стоит такого хотеть?
applyNext({ _title : 'my long title' })
- но помни, что это зло и юзать это надо аккуратно@verybigman если переменная по сути глобальная, то я бы не сказал, что это зло, вполне норм. @Guria к методу, который предложил Антон, добавлю еще про возможность добавлять методы в прототип: https://github.com/bem/bem-core/pull/636#issuecomment-51981145
@verybigman немного не понял как именно в описанном случае поможет applyNext(). Я переменную определил за пределами шаблонов.
То что моя хотелка, мягко говоря странная, сам понимаю. Но вопрос интересен с теоретической точкой зрения: Каким образом получить доступ к общей переменной в двух не связанных между собой bemtree шаблонах.
@Guria идея в том, что
this
общее вглубь по дереву, так что если положить что-то вthis
в блокеpage
, оно окажется доступно всем остальным шаблонам.Всё понял, спасибо.
А при вызове
BEMTREE.apply()
в этотthis
как-то положить что-нибудь можно? Или только в шаблонах это возможно?@Guria
Нет, но можно пробрасывать данные шаблоне на
match(function () { return !this.data; })
, т.е. на условие, что данные еще не были проброшены или вызыватьBEMTREE.apply()
на какой-нибудь корневой блокroot
и передавать данные + тот контекст, который хочется шаблонизировать на самом деле. Я приводил пример какое-то время назад в комментариях к https://ru.bem.info/forum/issues/157/Спасибо за ссылку. Теперь когда я таки добрался до bemtree+bemhtml стало понятно про что там речь шла. Надо ссылку сделать на все твои комменты более 10 строк на форуме :)
;-) да надо вообще поиск на форуме придумать.
@zxqfox https://github.com/bem/bem-forum-content-ru/issues?q=commenter%3Atadatuta но сделать "комменты более 10 строк", уже сложнее :)