AJAX経由でHTMLドキュメントを取得しているJavascriptアプリケーションを作成していて、その内部の要素にイベントリスナー(特にブートストラップポップオーバー)を添付して処理する必要があります。私はリスナーを付けるのが難しいです、そして、それは範囲の問題だと私は信じています。オブジェクト内の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); }});
...
問題は(私が思うに)this.load
でfunc()
呼び出しです:ここに関連するコードです。 this.process()
を渡すと、 'this'がウィンドウに表示され、エラーが発生します。 this.process
に合格した場合、それは作成されたラムダであり、それでも失敗します。私がthis.func()
と呼んだ場合、同じ問題が発生します。
コールバックを使用してAppオブジェクト内のスコープを保持するか、またはロード後にこの混乱を再構成してハンドラを呼び出しますか?
は同様イリヤに、それは最初に来たので受理されましたが、賞賛。私はすでに答えが入ってくるまでにこれをしていたが、ありがとう。リスナーはまだ添付されていませんが、私はそれが私のJavascriptではなくBootstrapの問題だと思います。 –
ああ、私はブートストラップを使っていないので、私はその問題に精通していません。がんばろう! (また、私は2番目の名言@Ilia - 2分は何もない) – JKing