У вас есть различные проблемы. Прежде всего, Underscore использует <% %>
для шаблонов , если вы не измените его на что-то вроде:
_.templateSettings = {
interpolate : /\{\{(.+?)\}\}/g
};
Итак, ваш шаблон должен выглядеть так:
<script type = 'text/template' id = 'boneTableHeaderTemplate'>
<tr id = "<%= obj.id %>Row">
<td><%= obj.columns %></td>
</tr>
</script>
Я также исправил ошибку HTML, которая была у вас в шаблоне, у вас не может быть текстового узла в качестве непосредственного потомка <tr>
, и нет никакой информации о том, к какому типу хитрости подойдет браузер, если вы попробуй такую вещь.
Во-вторых, _.template()
обычно используется для возврата скомпилированной версии шаблона, и эта скомпилированная версия является функцией, которую вы выполняете для получения окончательного HTML:
var t = _.template(some_template_html);
var html = t(data);
Так что вы, вероятно, хотите что-то подобное в своем конструкторе:
this.template = _.template($('#' + this.id + 'Template').html());
и это в вашем render
:
this.el.html(this.template(data));
Вы можете сделать все это одновременно с помощью _.template(template_html, context)
.
В-третьих, вы ссылаетесь на obj.id
и obj.columns
в своем шаблоне, но вы только даете ему id
и columns
, поэтому либо удалите префиксы obj.
из вашего шаблона, либо измените data
таким образом :
var data = {
obj: {
id: that.id,
columns: that.columns
}
};
Демо: http://jsfiddle.net/ambiguous/NYLqH/
Вы, конечно, должны будете исправить свой тест, чтобы учесть исправленный HTML.