我继承了一个使用GWT创建web应用程序的项目。它使用Bootstrap3的GWT包装器来完成元素的样式化。这在很大程度上运作得很好。现在,我遇到了一个路障,试图将Bootstrap3 Select
添加到当前使用GWT SelectionCell
的GWT DataGrid
表中。问题是,SelectionCell
不是“引导样式”,因此与其他web应用程序的样式不匹配。
不幸的是,我不能简单地将Select
添加到GWT DataGrid
中,因为Select
没有实现GWT Cell
接口,也没有扩展可以添加到Column
中然后添加到DataGrid
中的类。子类Select
和实现Cell
解决了这个问题。但是,我无法让Select
正确地呈现,因为它要求在JavaScript附加到DOM之后执行JavaScript函数,而DOM从未被DataGrid
中的Column
包装过。
相反,它由SafeHtmlBuilder
的render
函数呈现为Cell
。
// GWTBootstrap3::Select function to render the Select
public void render() {
if (isAttached())
command(getElement(), SelectCommand.RENDER);
}
protected native void command(Element e, String command) /*-{
$wnd.jQuery(e).selectpicker(command);
}-*/;
由于Select
从未附加到DOM,所以我需要手动调用selectpicker
函数。对于他,我创建了我自己的本机函数,需要在SafeHtmlBuilder
添加到DataGrid
之后调用它。如果我的Select
子类通过Cell
的onBrowserEvent
接受CLICK
事件,并在单击单元格后调用本机函数,则正确地呈现Select
。
我无法理解的是,何时以编程方式调用selectpicker
函数,以便在通过RPC调用添加行之后自动呈现Select
。我试着注册不同的处理程序,但没有结果。将调用处理程序,并调用包装selectpicker
函数的本机函数,但似乎还没有将HTML添加到表中。从浏览器的JavaScript控制台调用上面的JavaScript片段也是有效的。因此,它应该工作,找到,但我需要找到合适的地方打电话:
我正在使用的DataGrid
中的处理程序:
在调用到DataGrid
之后,我还尝试在不同的地方调用它,数据已经完成。同样,HTML似乎没有添加到select
中。即。当我在调用JavaScript之后立即调用myListDataProviderObject.getList()addAll(my data)
时。
发布于 2016-08-05 00:56:33
很可能您需要在调用本机方法之前添加一个Scheduler call,以确保浏览器在执行此调用之前完成UI的呈现(例如DataGrid)。
https://stackoverflow.com/questions/38779349
复制相似问题