我有一个“主”视图,如果你愿意,可以通过loadView
方法加载其他视图。我的问题是这些视图类执行一些初始化逻辑(在initialize
中),只能执行一次(与模板有关)。但是,如果我尝试多次实例化这些类,我会在同一个实例上调用initialize时出现错误症状。
我已经尝试在控制台中通过加载类并使用var x = new MyViewClass();
创建两个新实例来单独实例化它们,但每次第一个实例化时,第二个实例失败,因为模板已导致此错误被初始化。
这真的不应该发生,但我不能为我的生活看到导致问题的原因。
布局的加载代码如下。
loadView: function(name, bootstrap_function) {
this.unloadView();
var _class = require('View/'+name), // Let's load the view file
pretty = name.replace('/', ''), // Prettify the name by removing slashes (should end up with some camelcased niceness)
bs_name = '__bootstrap'+pretty, // Generate the name of the bootstrap function
view = new _class(); // Pass the event aggregator in
// If there is a bootstrap function, bootstrap
if(typeOf(bootstrap_function) == 'function') { // Check if one has been passed in
bootstrap_function.call(this, view); // Bootstrap: function(AppView, LoadedView)
}
this._loaded = view; // Store the view in _loaded
// Now that we have a view to play with
// we should insert it into our container object
view.$el.appendTo(this.$container);
// And render!
view.render();
},
unloadView: function() {
if(this._loaded !== null) {
this._loaded.remove();
this._loaded.unbind();
this._loaded = null;
}
}
修改
出现错误的模板代码是:
processTemplates: function() {
if(this.templates === undefined) return this;
console.log(this.templates);
if(Object.getLength(this.templates) > 0) {
Object.each(this.templates, function(template, name) {
this.templates[name] = _.template(template);
}, this);
}
return this;
},
console.log(this.templates)
输出显示在第一次初始化时,this.templates
包含字符串,但应在第二次初始化时显示模板函数(仅在processTemplates()
之后才会出现这种情况被称为。
我想知道它是否与我的类的定义方式有关,例如:
define(
['backbone', 'View/Kords', 'text!Template/Pages/Landing.html', 'Collection/TenantTypes'],
function(Backbone, KordsView, landing_html, TenantTypesCollection) {
var LandingView = KordsView.extend({
tagName: 'div',
className: 'tiled-light',
templates: {
'main': landing_html
},
landing_html
在类中定义如下,但是可能存在引用问题吗? _.template
不应该影响范围内landing_html
的值,是吗?
编辑#2
与landing_html的引用无关。我尝试将templates.main设置为类定义中的字符串,但我仍然像以前一样得到错误。