Доброго времени суток, при использовании bem-core появилась необходимость изменить стандартного блока page, не хотелось бы делать его дубликат, хотелось именно изменить/заменить.
хотелось бы узнать как правильно это делать
Доброго времени суток, при использовании bem-core появилась необходимость изменить стандартного блока page, не хотелось бы делать его дубликат, хотелось именно изменить/заменить.
хотелось бы узнать как правильно это делать
Привет!
Либо я не понимаю задачу, либо переопределить
page
можно точно так же, как и любой другой блок, просто положив свой шаблон на уровне проекта:я пробовал так, но что возвращать, пока ещё не догадался,
block('page').def()(function() { return 'что вернуть в return? ' });
если вернутьapplyNext()
, то шаблонpage
снова отработает,получалось только снять класс page и сделать новую обёртку под body, что тоже не то
return applyCtx(this.extend(this.ctx, { block: 'wrap', }));
PS перехожу с
bh
наbemhtml
Чтобы ответить на вопрос, что вернуть, нужно знать, что хочется получить в итоге ;)
задача - изменить page на свой шаблон,
block('page').def()(function() { return 'тут что-то';});
замечательно справляется с задачей изменения page из bem-core, но теперь необходимо вывести весь остальной контент, что вложено в page в bemjson@tadatuta предположим у меня свой page (упрощён для примера):
при выводе отработает и мой шаблон и шаблон
page bem-core
будет два title, и всё что былоpage bem-core
что я делаю не так?Если нужно просто вывести контент
page
, то не нужно зватьapplyNext()
, шаблоны на полеcontent
применятся сами.applyNext()
— это что-то типа «вызвать все остальные шаблоны в данном режиме». Т.о.приводит к тому, что выполняется все, что лежит в
bem-core
.Напиши все-таки конкретно, что именно хочется получить, тогда я смогу предметно ответить.
конкретно, я хочу работающую страницу, что бы вывелось всё что лежит в
index.bemjson.js
, что бы не отработалpage bem-core
. что бы я не выводил ввыводится либо undefined, вместо того что должно лежать в body, либо [object Object], либо вообще ничего, вместо контента, вместо блоков которые лежат в
index.bemjson.js
если всё равно не понятно, я могу на примерах постораться объеснить
[object Object] и undefined может выводиться при
return applyNext();
иreturn;
, потому что def() ожидает строку.Чтобы заменить шаблон сделайте не def() а replace():
При такой постановке задачи сработает:
Только я сомневаюсь, что это действительно то, чего хочется.
В общем, примеры бы не помешали, да. Потому что есть вероятность, что делать с нуля не обязательно и можно решить задачу более красивым способом.
Можно просто по пунктам перечислить, какие конкретно моменты в базовом шаблоне
page
не подходят (в идеале — с пояснением, почему именно).оба варианта на первый взгляд подошли
спасибо большое,
да, я сделаю наверное отчёт, почему стандартный page не подходит под наши проекты, и что хотелось бы видеть в нём. В issues отписаться или сюда?
можно здесь обсудить, а потом завести issues про те моменты, которые решим исправить в общей реализации.
tadatuta, на самом деле мы хотим переопределить page для двух вещей:
а) Докидать своих метатегов и блоков в head. Пример:
б) Докидать своих блоков/элементов в body Пример:
Таких блоков штук 5-10. Нам они нужны на каждой странице и во многих проектах. Для их добавления нужно влезть вот в эти 2 места https://www.evernote.com/l/AS_hZS0E8o5FKLT4IORl7glS2JYHcEPYCFo но мы не понимаем как это сделать. Будем очень благодарны, если разжуешь.