Ответ 1
Вы получаете свою ошибку прямо здесь:
template: _.template($('#tmpl_sourcelist').html()),
Часть внутренних элементов _.template
включает вызов String#replace
в тексте несвязанного шаблона на пути создания скомпилированной функции шаблона. Эта конкретная ошибка обычно означает, что вы действительно говорите об этом:
_.template(undefined)
Это может произойти, если в DOM нет #tmpl_sourcelist
, когда вы говорите $('#tmpl_sourcelist').html()
.
Существует несколько простых решений:
- Откорректируйте свой
<script>
порядок, чтобы ваш#tmpl_sourcelist
появился, прежде чем пытаться загрузить ваше представление. -
Создайте скомпилированную функцию шаблона в вашем представлении
initialize
вместо определения "класс":window.SourceListView = Backbone.View.extend({ tagName:"li", initialize:function () { this.template = _.template($('#tmpl_sourcelist').html()); //...
Что касается tagName
, то прекрасное руководство говорит следующее:
el
view.el
[...]
this.el
создается из свойств видаtagName
,className
,id
иattributes
, если это указано. Если нет, el - пустойdiv
.
Итак, имея это на ваш взгляд:
tagName: 'li'
означает, что Backbone автоматически создаст новый элемент <li>
в качестве вашего представления el
.