Ваша переменная view_templates
в порядке (и это тоже хорошая идея).Вы просто должны быть уверены, что используете правильный this
внутри вашего $.get()
обратного вызова и внутри вашего tmpls.each()
вызова.Я думаю, вы хотите, чтобы ваш initialize
выглядел так:
initialize: function() {
this.view_templates = { };
var _this = this;
$.get('js/Test2Templates.tpl', function(doc) {
var tmpls = $(doc).filter('template');
tmpls.each(function() {
_this.view_templates[this.id] = $.jqotec($.unescapeHTML(this.innerHTML));
});
});
},
Я не уверен, какой this.id
вы хотите внутри tmpls.each()
, но я предполагаю, что вы хотите DOM id
атрибут из текущего шаблона, поэтому я оставил его как this.id
.
Назначение this.view_templates
в вашем конструкторе (initialize
) необходимо, потому что вы, вероятно, хотите, чтобы каждый экземпляр представления имел свой собственныйкопия массива.Создание нового экземпляра представления не делает глубокую копию представления, поэтому, если у вас просто есть:
MessageView = Backbone.View.extend({
view_templates: {},
// ...
, тогда все экземпляры в конечном итоге будут использовать один и тот же объект view_templates
, а view_templates
ведут себя больше как переменная класса, чем переменная экземпляра.
Вы можете указать переменные экземпляра в определении представления (т. е. вызов Backbone.View.extend()
) как форму документации, но вы захотите инициализировать любую из них, котораядолжен вести себя как переменная экземпляра в вашем методе initialize
;Только для чтения или «переменные класса», такие как events
, можно оставить как часть определения представления.