Входящие: Есть редктор, который сохраняет примерно такие данные
post.html = '<p>\r\n\t\tСтремление к совершенству – пожалуй, именно так можно описать развитие человечества. Вот взять, к примеру, женскую красоту. Чего только не сделают девушки, чтобы оказаться самой красивой. ... .</p>\r\n\t<!-- gallery(3) --><p>\r\n\tА вот раньше оверклокинг существовал исключительно ради выгоды. ... </p><p><!-- gallery(4) --></p>'
В этой строке есть вставки коментариев. Задача: В контексте bemtree хочу заменить комнтарии на html код блока галлереи с слайдером. Хоче сделать примерно следующее:
post.galleries.map(function(gallery, index) {
var id = post.galleries_list[index].id,
images = post.galleries[index].images,
galleryBlock = {
block : 'slider',
slides : images
}; //Здесь что-то нужно сделать что бы распарсить блок в строку
post.html = post.html.replace('<!-- gallery(' + id +') -->', galleryBlock)
})
Вопрос: Как в bemtree/bemhtml распарсить блок в html строку? Или предложите другие варианты решения проблемы?
чтобы в BEMTREE получить HTML-строку, нужно снача вызвать
apply()
, чтобы получитьbemjson
, а затем вызватьBEMHTML.apply
из контекста BEMTREE, что не очень-то красиво.но в данном конкретном случае должно быть достаточно рассплитить строку по вхождению комментария с галереей и вернуть массив, состоящий из HTML-строк и bemjson-а галереи. тогда она естественным образом на этапе выполнения BEMHTML-шаблонов превратится в нужный HTML.
Спасибо!
@tadatuta Как будет красиво?
@ilyar, на сервере будет что-то приблизительно такое:
Т.е. из BEMTREE вернется BEMJSON, а не сразу готовый HTML. И затем этот BEMJSON будет преобразован в HTML внешним по отношению к BEMTREE-шаблонам вызовом BEMHTML.apply. При такой схеме не нужно пробрасывать BEMHTML в контекст выполнения BEMTREE и остается четкое разделение кто за что отвечает.
В браузере тоже самое получается: https://github.com/ilyar/bem-examples/blob/master/desktop.blocks/someBlock/someBlock.browser.js#L42-L44
Честно скажу, не понял зачем
this
во втором параметре.мм, тоже не знаю зачем там
this
:)then()
вторым параметром принимает функцию, которая будет вызвана в случае, если промис пофейлится.понятно :)