我有一个“主”视图,如果你愿意的话,一个布局,它通过该loadView
方法加载其他视图。我的问题是这些视图类执行一些initialize
只能执行一次的初始化逻辑(in )(与模板有关)。但是,如果我多次尝试实例化这些类,则会收到在同一个实例上调用 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 设置为类定义中的字符串,但我仍然像以前一样遇到错误。