Я пытаюсь сделать что-то, что невозможно только в HTML / Blaze.
Под этим я подразумеваю, что я пытаюсь открыть div в {{#if}}, не закрывая его в этом конкретном if. Невозможно сделать это следующим образом:
{{#each getData}}
{{#if equals this.level first}}
<div><p>content</p>
{{/if}}
{{#if equals this.level last}}
</div>
{{/if}}}
{{/each}}
Итак, я нашел что-то, что могло бы решить эту проблему. Использование тройных фигурных скобок и генерация HTML-части в JS.
{{#each getData}}
{{{getContent this}}}
{{/each}}
getContent () возвращает мой HTML. Это выглядит так:
getContent(obj) {
if (obj.level == first)
return "<div><p>content</p>";
if (obj.level == last)
return "<p>content></div>";
else
return "<p>content</p>";
}
Работает, рендерит HTML, но есть одна проблема. Див, который я открываю, кажется, закрывается сам.
Вот что отображается:
<div><p>Content</p></div>
<p>content</p>
<p>content</p>
вместо:
<div><p>content</p>
<p>content</p>
<p>content</p>
</div
Я очень устал, я прошу прощения, если я недостаточно ясен или если решение очевидно.
РЕДАКТИРОВАТЬ: То, что у меня сейчас, и он работает нормально, это следующее:
HTML
{{#with getDataFromButton}}
{{formatData this}}
{{/with}}
JS
formatData(data) {
var res = "";
for (var i = 0; i < data.length; i++) {
if (data[i]["level"] == 0) {
if (res.length > 0)
res += "</div>";
res += "<div class=\"whiteBox\"><p>" + data[i]["value"] + "</p>";
}
else if ('last' in data[i]) {
res += "<p>" + data[i]["value"] + "</p></div>";
}
else {
res += "<p>" + data[i]["value"] + "</p>";
}
}
return res;
},
Спасибо всем вам за разъяснения! И с новым годом (еще не поздно).