2011-05-10 48 views
0

我創建了'Page Class'和相關的'load'方法。JavaScript在'load'方法回調中遇到'this'問題

加載工作完美,但我不能修改該頁面的屬性 回調方法, 雖然我不能引用頁面名稱屬性!

 
function Page(page) { 
    this.page = page; 
    this.firstLoad = true; 
    this.pageName = this.page.split('.')[0].split('/')[1]; 
    this.loaded = false; 
} 



Page.prototype.load = function() { 
    var that = this; 
    $("#content").html(); 
    $("#content").load(this.page, function() { 
     $.getScript("PagesViewModel/" + that.pageName + "ViewModel.js"); 
     that.loaded = true; 
    }); 
} 

this.loaded總是假!

謝謝您的幫助

問候

回答

0

由於您的$.load方法是異步的,當你的Page.prototype.load方法返回,this.loaded永遠是假的,並不會切換到真實直到$.load方法返回。

所以,在這條線的位置:

that.loaded = true; 

loaded值將是假的正確設置它之前,和右後真。問題是在您的ajax請求完成之前,Page.prototype.load方法已經返回。你能發佈你在哪裏檢查loaded的價值嗎?

+0

謝謝你Eli。 但我在做負載成功時的修改, 那時$ .load已經返回了,不是嗎? – 2011-05-10 12:53:34

0

您需要在執行外部ajax調用時全局定義實例。

 
function test(instancename){ 
this.instancename = instancename; 
this.sayHello = function(data){ 
alert("hello "+data); 
} 
$.getJSON(url, params, this.instancename+".sayHello"); 
} 

var k = new test("k"); 

由於響應來自另一個來源,因此您需要全局定義您的實例。

+0

謝謝你,因爲Eli說我必須進行同步呼叫。 [鏈接](http://stackoverflow.com/questions/133310/how-can-i-get-jquery-to-perform-a-synchronous-rather-than-asynchronous-ajax-req/2592780#2592780) – 2011-05-10 13:24:14

+0

不,我不相信你必須進行同步通話。我們需要查看你正在檢查加載的值的位置,以確保在ajax調用完成之前你沒有檢查它。 – Eli 2011-05-10 14:17:42