是否可以用我的widget组件替换已知的html元素?(强调"替换"这个词,我不想把小部件放在那个元素中.:)
<body>
<img />
<div />
<a id="tmpEl" />
...
<img />
</body>
Run Code Online (Sandbox Code Playgroud)
会成为
<body>
<img />
<div />
<div class="gwt-panel">...</div>
...
<img />
</body>
Run Code Online (Sandbox Code Playgroud)
我试过这样的事......
tmpEl.getParentElement().replaceChild(myPanel.getElement(), tmpEl);
Run Code Online (Sandbox Code Playgroud)
...但是由此产生的DOM元素是'聋',即他们没有收到点击事件.(为了完成这项工作,我可能不得不调用RootPanel.get().采用(widget),但该方法无法访问.)
有一段时间我认为HTMLPanel.addAndReplaceElement可能是答案,但这只适用于你的'placeholder'元素是HTMLPanel小部件的(直接)子元素.这显然不是我的情况.:(
请注意,我只知道该元素的id,我不是在创建它.简单地说:我完全需要问题.
至于"更高级别的DOM操作":如果它允许我放置小部件而不是那个占位符元素,我将很乐意以最高级别操作DOM.
似乎在将widget插入DOM之后调用widget.onAttach()可以解决问题.
class MyWidget extends Composite
{
...
public void attach()
{
/* Widget.onAttach() is protected
*/
onAttach();
/* mandatory for all widgets without parent widget
*/
RootPanel.detachOnWindowClose(this);
}
}
tmpEl.getParentElement().replaceChild(myWidget.getElement(), tmpEl);
myWidget.attach();
Run Code Online (Sandbox Code Playgroud)
感谢Google Web Toolkit小组的 André .
我仍然想知道为什么没有RootPanel.addAndReplaceElement(Widget,Element),类似于HTMLPanel.addAndReplaceElement(Widget,Element).
mar*_*vic -1
我建议你尝试这样的事情......
<body>
<a id="tmpEl" />
</body>
Run Code Online (Sandbox Code Playgroud)
然后在某处创建一个小部件(例如文本框小部件)
TextBox tb = new TextBox();
Run Code Online (Sandbox Code Playgroud)
创建小部件后,您可以使用 tb.getElement() 获取它的 DOM 对象(我不确定这是正确的方法名称,但它肯定类似于 getElement)
之后你可以使用
Element parent = Document.getElementById('tmpEl').getParent();
parent.removeChild(Document.getElementById('tmpEl'));
parent.appendChild(tb.getElement());
Run Code Online (Sandbox Code Playgroud)
add() 所做的另一件事是在要添加到面板的小部件上调用 Widget.onAttach()。onAttach 做了一些工作来注册小部件以接收事件。
您可以尝试调用 tb.onAttach(); 可能还需要调用 RootPanel.detachOnWindowClose(tb); (如上一篇文章中提到的)
| 归档时间: |
|
| 查看次数: |
15373 次 |
| 最近记录: |