AJAXを介してHTMLドキュメントを取得するJavascriptアプリを作成し、それを処理して、イベントリスナー(具体的には、ブートストラップポップオーバー)をその中の要素にアタッチする必要があります。リスナーを接続するのに問題があり、スコープの問題だと思います。関連するコードは次のとおりです。
var App = function(site){
this.load = function(data, func){
$('div.ajax').html(data);
func();
}
this.dispatch = function(data){
if(data.indexOf('from_server') !== -1){
this.load(data, this.process);
console.log('Loaded view from Matisse.');
return true;
}
}
this.process = function(){
this.popovers('from_server');
}
this.popovers = function(el){
var that = this;
$('img.artwork.gallery', el).each(function(){
$(this).popover({ trigger: 'hover', content: that.popoverPopulate(this) });
});
}
this.popoverPopulate = function(el){
return $(el).next('div.popover_content').html();
}
}
var APP = new App();
$.ajax({blah: blah, success: function(data){ APP.dispatch(data); }});
...
問題は(私が思うに)のfunc()
呼び出しですthis.load
。これを渡すとthis.process()
、「this」のスコープがウィンドウになり、エラーが発生します。合格this.process
すると、作成されたのはラムダですが、それでも失敗します。私が呼ぶthis.func()
と同じ問題が発生します。
a)コールバックを使用してAppオブジェクト内にスコープを保持する、またはb)ロード後にハンドラーを呼び出すようにこの混乱を再編成するにはどうすればよいですか?