2012-02-25 61 views
2

我只是想後的Qooxdoo應用程序準備觸發一個事件,所以我就開始用「Hello World」的應用程序和附加的建議在main函數的末尾:的Qooxdoo在窗口準備

main : function(){ 
     // Hello World part... 

    qx.event.Registration.addListener(window, "ready", function() { alert("application ready"); }); 
} 

但是,它似乎沒有在Chrome或Firefox中觸發(我沒有測試IE),所以我挖了一些,發現這個,它的工作。

if (qx && qx.event && qx.event.Registration) 
{ 
    var manager = qx.event.Registration.getManager(window); 
    var handler = manager.findHandler(window, "ready"); 

    if (handler.isApplicationReady()) { 
    alert("application ready"); 
    } 
} 

任何人都可以告訴我爲什麼推薦的方法不起作用,或者我把它放在錯誤的地方?

謝謝!

回答

1

您是否從"From jquery to qooxdoo"文檔獲得「建議」? (如果你引用你的來源,它總是有幫助的)。

我認爲你在這裏混合的東西。首先,「窗口就緒」與「應用程序就緒」不同。我認爲「窗口就緒」(如鏈接手冊頁所示)是全局JS窗口對象的低級事件。如果您運行的是高級別qooxdoo應用程序(因爲它出現),當您在主要的方法中註冊時,此事件早已過去。所以事件處理程序永遠不會運行。

在你的第二個代碼示例,你不聽爲事件,但檢查狀態isApplicationReady()。在將應用程序從未準備就緒狀態轉爲準備就緒狀態後,此狀態可能會很長時間返回。

+0

是的會員區的最終化功能,也就是在那裏我找到了參考。我會記得下一次加入。好的,你的解釋是有道理的。我沒有意識到,qooxdoo在窗口準備好事件之後進入。那麼,在所有qooxdoo運行之後,isApplicationReady()是否會激活?我基本上希望在qooxdoo準備就緒並加載完畢後發射事件。 – Jonathan 2012-02-28 17:43:11

+0

再次,* isApplicationReady *是**不是**事件觸發,而是狀態檢查。至於你的問題,這真的取決於你的意思是「qooxdoo已準備就緒並已加載」。窗口上有「準備就緒」事件,但正如您所看到的,在您的任何自定義代碼運行之前它會被觸發。 - 這項活動需要什麼?當您的main()代碼運行時,您可以確定所有內容都已準備好並加載。如果您想將其發送給應用程序的其他部分,您可以發起自定義事件! – ThomasH 2012-02-29 18:04:58

0

覆蓋只需在應用程序

finalize : function() 
{ 
    // Call super class 
    this.base(arguments); 
    alert("Hello World"); 
}