我在寫一個Javascript應用程序,它通過AJAX獲取HTML文檔,然後需要處理它以將事件偵聽器(特別是Bootstrap彈出)附加到其中的元素。我很難附加聽衆,我認爲這是一個範圍問題。下面是相關的代碼:對象內的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
,它是一個創建的lambda,它仍然失敗。如果我打電話this.func()
發生同樣的問題。
我該如何a)使用回調將應用範圍保存在App對象中,或者b)重新組織這個混亂以在加載後調用處理程序?
接受,因爲它排在第一位,但榮譽給伊利亞爲好。當答案出現時,我已經這樣做了,但謝謝。聽衆仍然沒有附加,但我認爲這是Bootstrap的問題,而不是我的Javascript。 – 2012-04-11 02:39:49
啊,是的 - 我沒有使用bootstrap,所以我不熟悉它的問題。祝你好運! (另外,我會第二個榮譽@伊利亞爾 - 兩分鐘不是沒有。) – JKing 2012-04-11 02:45:25