2013-06-27 60 views
2

我正在jQuery.Atmosphere.js爲例,在這個具有公共職能等的onMessage,onError的等。而實現這個API我已經做了以下試圖瞭解函數回調的作品

var socket = $.atmosphere; 
var request = new $.atmosphere.AtmosphereRequest(); 
request.onMessage = function(response) { 
    // do what i want to do 
} 

這裏的時候,只要服務器將數據推送到瀏覽器,就會觸發onMessage。我不明白如何request.onMessage(響應)得到通知,這是在大氣api之外?我查看了jQuery.Atmosphere.js,並且無法連接這些點是如何工作的。我不是在談論websocket或服務器推送或關於大氣框架的任何事情。我只想了解javascript函數回調是如何工作的。任何人都可以告訴我一個例子如何函數回調工作或給我一個鏈接,所以我可以挖掘?

+0

你的代碼是語法不正確。提供正確的一個。 – zerkms

+0

它在這裏被稱爲:https://github.com/Atmosphere/atmosphere/blob/4af1424a04b1568a02bc14dce05e53b04dcf6ef6/modules/jquery/src/main/webapp/jquery/jquery.atmosphere.js#L2063 –

+0

@Joseph Silber:'request.onMessage (響應){}'---哦,我看,這是正確的,但有冗餘'{}' - 這可能指向一個錯誤。 – zerkms

回答

0

你的語法不正確,應該是:

request.onMessage = function(response) { 
    // do what I want to do 
}; 

正如你所看到的,onMessage屬性必須設置爲一個功能。當該事件發生Message事件時,該函數將被調用。所述jQuery.Atmosphere.js代碼包含:

f.onMessage(response); 

其中f是表示AtmosphereRequest對象其內部變量。該函數從invokeFunction()稱爲:

 function _invokeFunction(response) { 
      _f(response, _request); 
      // Global 
      _f(response, jQuery.atmosphere); 
     } 

_request處於AtmosphereRequest構造的局部變量,它包含這個請求對象的所有狀態。這是Javascript面向對象編程的一部分;此AtmosphereRequest對象的所有應用都可以訪問這些內部狀態變量。

+0

OK,你能告訴我f爲如何稱爲請求 – user1595858

+0

我仍然沒有得到,你可以用簡單的例子不出來使用氣氛代碼解釋。 – user1595858

+0

不是,我在這方面沒有太多的專業知識。我建議你谷歌「JavaScript面向對象編程」。 – Barmar