Я использую Handlebars (v 1.0.0), чтобы заполнить таблицу в HTML. Однако каким-то образом он не заполняет таблицу, как я привык.
Вот мой шаблон:
{{#if users}}
<table>
{{#each users}}
<tr>
<td>{{username}}</td>
<td>{{email}}</td>
</tr>
{{/each}}
</table>
{{else}}
<h3>No users found!</h3>
{{/if}}
Итак, я нахожу пользователей, потому что я не вижу "Нет пользователей!" и когда я вызываю пустой объект, он показывает "Нет пользователей!".
Если я не использую таблицу и не распечатываю эти пользователи, как следующий пример. Имена пользователей и почтовый адрес будут отображаться в моем HTML.
{{#if users}}
{{#each users}}
{{username}}<br/>
{{email}}<br/>
{{/each}}
{{else}}
<h3>No users found!</h3>
{{/if}}
Вот как мой шаблон строится в javascript:
var htmlSource = $(data).html();
var template = Handlebars.compile(htmlSource);
var compiled = template(usersArray);
that.$el.html(compiled);
Теперь, когда я console.log скомпилированный объект, он уже не показывает таблицу.
Знаете ли вы, почему это не работает, и можете ли вы мне помочь?
EDIT:
Я только что проверил еще несколько и обнаружил, что данные будут отображаться в HTML, когда я не буду терять теги <table>
. Однако <tr>
и <td>
не будут отображаться в html. Отобразятся данные в нем.
ИЗМЕНИТЬ 2: Я узнал, что это проблема jquery или javascript. Когда я console.log htmlSource, шаблон HTML изменяется на это:
{{#if users}}
{{#each users}}
{{/each}}
{{else}}
<h3>No users found!</h3>
{{/if}}
<table><tr>
<td>{{username}}</td>
<td>{{email}}</td>
</tr></table>
Как видно, таблица перемещается за пределы оператора if. Я пробовал другие версии jQuery (2.0.2, 2.0.3, 2.0.1, 1.10.2), но это не сработало. Я попытался использовать innerXHTML script, но это работает так же, как jQuery.
Итак, я предполагаю, что это может быть проблема FireFox (хотя я пробовал 25 и 26), Chrome делает то же самое... может быть, что-то в EcmaScript??
Я скоро узнаю вас...
ИЗМЕНИТЬ 3:
Я создал html файл с html, который мне нужен. С помощью script я получаю конкретный раздел html, который мне нужен, и поместите его в переменную данных.
Теперь, когда консоль регистрирует данные (console.log(data)), нет ничего плохого. Когда консоль регистрирует данные с помощью jQuery, html изменяется: console.log($ (data));
Кажется, что-то там происходит не так, но только при использовании табличных тегов. Это что-то, что jQuery не может справиться? Я не знаю. Я знаю, как преодолеть эту проблему, используя тег script... Хотя я хотел бы загрузить это, используя require;)
P.S. nemesv благодарит вас за редактирование;)