bem-site / bem-forum-content-ru

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

Ошибка bem-core v2.5.0 #147

Open isallavat opened 9 years ago

isallavat commented 9 years ago

При сборке бандла выдает такую ошибку

Error: Only literal or function is allowed in template's body at 856:30 block('block1').content()({

at Compiler.assert (путь проекта\libs\bem-core\node_modules\bem-xjst\node_modules\xjst\lib\xjst\compiler\base.js:1 80:9)

at Compiler.transformTemplates (путь проекта\libs\bem-core\node_modules\bem-xjst\node_modules\xjst\lib\xjst\compiler\base.js:648:8)

at Array.map (native)

at Compiler.translate (путь проекта\libs\bem-core\node_modules\bem-xjst\node_modules\xjst\lib\xjst\compiler\base.js:201:41)

at Object.translate (путь проекта\libs\bem-core\node_modules\bem-xjst\node_modules\xjst\lib\xjst\api.js:16:40)

at Compiler.translate (путь проекта\libs\bem-core\node_modules\bem-xjst\lib\bemhtml\compiler.js:121:35)

at Compiler.generate (путь проекта\libs\bem-core\node_modules\bem-xjst\lib\bemhtml\compiler.js:707:14)

at Object.generate (путь проекта\libs\bem-core\node_modules\bem-xjst\lib\bemhtml\api.js:16:40)

at exports.techMixin.getCompiledResult (путь проекта\libs\bem-core.bem\techs\bemhtml.js:46:24)

at _fulfilled (путь проекта\node_modules\bem\node_modules\q\q.js:798:54)

Файл block1.bemtree Содержание

block('block1').content()({ elem: 'elem1' });

Как я понял теперь параметром может быть функция или строка. Но почему? Раньше у меня был bem-core v2.2.1 и там можно было вставлять и объект.

apsavin commented 9 years ago

Говорят, чтобы в development и production режиме гарантированно был одинаковый результат.

isallavat commented 9 years ago

Не понятно. Если я в development в качестве параметра использую объект или массив, то на production он может выдать другой результат?

apsavin commented 9 years ago

Есть вот такое issue

apsavin commented 9 years ago

Было бы удобнее, конечно, если бы "простые" объекты были разрешены, а подобный exception кидался только в случае обращений к this.ctx.someData и т.п.

Можно, наверное, у @tadatuta спросить, что они по этому поводу думают.

isallavat commented 9 years ago

Согласен. Но пока что придётся переписывать блоки. Благо проект только на начальной стадии и блоков немного.

tadatuta commented 9 years ago

@apsavin простые объекты разрешены, ругаться начинает при обращении к полям this или при наличии apply().

apsavin commented 9 years ago

Точно, я ошибся. Странно, что топикстартер указывает на ошибку в файле

block('block1').content()({
    elem: 'elem1'
});
isallavat commented 9 years ago

Теперь все понятно. У меня в этом блоке есть выражения типа this.ctx.bla_bla_bla. Поэтому и вызывает ошибку. Если вставляю простой объект, то все работает.