Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SmartGWT/GWT通过javascript访问构造函数中创建的div_Javascript_Html_Gwt_Smartgwt - Fatal编程技术网

SmartGWT/GWT通过javascript访问构造函数中创建的div

SmartGWT/GWT通过javascript访问构造函数中创建的div,javascript,html,gwt,smartgwt,Javascript,Html,Gwt,Smartgwt,我正在尝试将自定义javascript库与SmartGWT项目集成 我的页面中有一些区域是通过点击按钮动态加载的,因此在Java代码中,我有一些类似于以下伪代码的内容: button . onClick { contextArea = new contextAreaTypeA() } 因此,我创建了contextAreaTypeA,在构造函数中,我想创建一系列div元素,为它们分配ID,然后调用自定义库中的一个函数,将内容加载到这些div中 SmartGWT摆脱了在页面中的任何元素上获

我正在尝试将自定义javascript库与SmartGWT项目集成

我的页面中有一些区域是通过点击按钮动态加载的,因此在Java代码中,我有一些类似于以下伪代码的内容:

button . onClick {
    contextArea = new contextAreaTypeA()
}
因此,我创建了contextAreaTypeA,在构造函数中,我想创建一系列div元素,为它们分配ID,然后调用自定义库中的一个函数,将内容加载到这些div中

SmartGWT摆脱了在页面中的任何元素上获取ID或设置ID的任何方式,要在元素上创建ID,您必须创建自己的小部件并覆盖
getInnerHtml
,或者创建类似HTMLFlow的内容并添加类似
myflow.setContent(“”)的内容我就是这样做的

我的问题是,在构造函数中这样做意味着当我调用带有ID的自定义javascript函数时,我创建的这个div似乎还没有连接到dom,所以我总是得到一个空指针

由于我的模块和文档已经加载,并且正在动态添加此内容,因此我无法调用document ready或onModuleLoad,因此我应该如何以及何时检测我的div的负载,以及何时从JSNI调用中访问div是安全的

我尝试过多种方法,例如添加附加处理程序(它们似乎从未被调用),我尝试过向HTMLFlow添加绘制处理程序,但它们似乎在绘制HTMLFlow div之后,但在实际绘制内容之前被调用。我尝试在HTMLFlow()上调用redraw,但这似乎根本没有调用onDraw方法


我不知道如何将这个库与我的SmartGWT集成,如果有人能建议一种更好(或任何)的方法,那就太好了。

在一个普通的GWT ovverriding
Widget.onAttach()
为我做点小动作:

public class MyWidget extends Widget {

    @Override
    protected void onAttach() {
        super.onAttach();
        // Call your JSNI code
    }

}
重要事项:

  • 注意
    super.onAttach()
    调用。必须在调用JSNI之前触发它
  • 图像将在
    onAttach()之后加载。因此,如果您的JS代码对图像做了一些技巧(例如检查它们的高度),那么就太早了

所以我原来以为自己遇到的问题根本不是问题,事实上是完全不同的问题

OnAtach()仍然没有启动,原因我似乎无法理解,但是在drawHandler中执行所有操作都很好

我的引用出现空值的原因是,当我试图访问javascript中的元素时,我正在使用

document.getElementById("myDiv");
而我应该用

$wnd.document.getElementById("myDiv");

这取决于我相信GWT在iFrame中封装脚本的方式(我的理解是,脚本可以在运行时动态注入?但我可能错了)。

问题是,似乎从来没有为SmartGWT小部件启动过onAttach。例如,当连接HTMLFlow时,不会触发onAttach方法。我不知道为什么。第二,被附加意味着它将被附加,但不一定是它的内容。奇怪。对于GWT调用
super.onAttach()
意味着附加我和所有孩子。是的,在绘制元素时会触发onDraw,但似乎在绘制HTMLFlow的内容之前,所以它仍然存在相同的问题。我可以尝试重写getInnerHTML并以这种方式执行,而不是在HTMLFlow中嵌入div