[英]JSNI (GWT-GWTP): jQuery does not select node in 'document ready' function after ready event fires
我試圖基於其CSS ID選擇一個div節點,並更改div的文本,全部使用jQuery (2.2.0)。 我的問題是jQuery選擇似乎從未正常發生?
我將從這段代碼中解釋如何確認JSNI本機方法renderTree()被調用,'document ready'事件觸發以及CSS ID為div的DOM中 ...
public native void renderTree()/*-{
$wnd.alert("renderTree");
$wnd.$($doc).ready(function() {
$wnd.alert("DOM ready!");
$wnd.$('#gramTree').text("text changed from JSNI jQuery");
});
}-*/;
到目前為止,是1.-3。 所有操作均按預期發生... 但是jQuery $ #gramTree的選擇似乎從未發生 ,因為具有該ID的div的文本永遠不會更改為“文本從JSNI jQuery更改”(其文本最初從UiBinder加載為“從UiBinder初始化的文本”,並保持這種狀態)。
我可以在此時手動更改文本,方法是在瀏覽器控制台上手動輸入在回調中似乎無效的jQuery代碼行( $('#gramTree').text("text changed from JSNI jQuery");
)。 同樣,我也可以通過對renderTree()進行編碼以使其也從頁面上的按鈕的click事件中調用,然后手動單擊該按鈕來使其手動工作。
任何想法出什么問題了嗎?
通過有根據的猜測,給定4.-5。,似乎“文檔准備就緒”事件無法正常工作,或者我該如何處理?
有什么想法需要進一步檢查嗎?
謝謝!
您應該依靠View Lifecycle來確保它已附加到DOM。 來自GWTP ViewImpl#onAttach
doc
視圖附加到DOM后調用的方法。 您應該重寫此方法,以執行需要執行的與ui相關的所有初始化,該初始化需要在附加視圖且演示者不必知道之后進行(例如,附加事件處理程序)
在您的情況下,當$wnd.$('#gramTree').text("text changed from JSNI jQuery");
被稱為#gramTree元素未附加到DOM,並且對jQuery不可見。
我自己將此答案發布為可以在其他地方找到的可食用的東西(有點黑):從Deferred ScheduledCommand調用JSNI renderTree()方法。
似乎我要開始使用的“准備文檔”方法將是真正的規范/預定方法。 所以我寧願找出來...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.