メソッドを介して他のビューをロードする「マスター」ビュー、場合によってはレイアウトがありますloadView
。initialize
私の問題は、これらのビュー クラスが、(テンプレート化のために) 1 回しか実行できないいくつかの初期化ロジック ( ) を実行することです。ただし、これらのクラスを複数回インスタンス化しようとすると、同じインスタンスで初期化を呼び出すというエラーの症状が発生します。
コンソールで、クラスをロードして2つの新しいインスタンスを作成することにより、それらを個別にインスタンス化しようとしましたvar x = new MyViewClass();
が、最初のインスタンスがインスタンス化され、テンプレートがすでに初期化されているために発生したこのエラーのために2番目のインスタンスが失敗するたびに。
これは本当に起こってはならないことですが、私の人生では何が問題を引き起こしているのかわかりません。
レイアウトの読み込みコードは次のとおりです。
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
本来あるべき文字列を含んでいることを示していますが、2 回目の初期化ではテンプレート関数を示しています (これは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を文字列に設定しようとしましたが、以前と同じようにエラーが発生しました。