我正在尝试根据其CSS ID选择div节点,并使用jQuery(2.2.0)更改div的文本。我的问题是 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。一切都按预期发生... 但是'#gramTree'的jQuery $选择似乎永远不会发生,因为具有该ID的div从未将其文本更改为“从JSNI jQuery更改的文本”(其文本最初从UiBinder加载为“从UiBinder初始化的文本”,并保持这种方式。)
我可以手动输入要在此时更改的文本,方法是在浏览器控制台上手动输入jQuery代码行,该代码行似乎无法通过回调($('#gramTree').text("text changed from JSNI jQuery");
)运行。同样,我也可以通过编写renderTree()编码来手动工作,也可以从页面上按钮的click事件调用,并在此时手动点击该按钮。
任何想法在这里出了什么问题?
似乎是通过有根据的猜测,给出了4.-5。,某些内容无法正常处理'文档就绪'事件,或者我如何处理它?</ strong>
有什么想法可以进一步检查?
谢谢!
答案 0 :(得分:1)
您应该依赖View Lifecycle以确保它附加到DOM。来自GWTP ViewImpl#onAttach
doc
视图附加到DOM后调用的方法。你应该 覆盖此方法以执行任何与ui相关的初始化 需要在视图附加之后完成 演示者不必知道(附加事件处理程序) 实例)
在你的情况下,当$wnd.$('#gramTree').text("text changed from JSNI jQuery");
被调用时#gramTree元素没有附加到DOM并且对jQuery不可见。
答案 1 :(得分:0)
我自己发现这个答案作为思考的食物(它是黑客)我在其他地方找到了:从Deferred ScheduledCommand调用JSNI renderTree()方法。
似乎&#39;文件已准备好&#39;方法I尝试上班将是真正的规范/预期的方式。所以我宁愿把它弄清楚......