gpt4 book ai didi

java - GWT Node 或 Element 监听 onAttach 事件

转载 作者:行者123 更新时间:2023-12-01 21:24:40 27 4
gpt4 key购买 nike

有没有办法在 GWT Node 中处理 onAttach 事件?我想我可以这样做:

Node myDiv = DOM.createDiv();
Magic.setOnAttachEventListener(myDiv, new EventListener() {
@Override
public void onEvent(Event event) {
// ...
}
}

当我做这样的事情时应该调用处理程序,

parent.appendChild(myDiv);

假定 parent 已附加自身,即它显示在当前窗口中。

最佳答案

我发布了我的第二个答案,因为现在我知道您无法更改 DIV 添加到父级的方式。

经过一番搜索,我发现 Mutation events 。它们允许您监听 DOMNodeInserted 事件:

JS:

myDiv.addEventListener("DOMNodeInserted", function (ev) {
alert('added');
}, false);

在GWT中你需要使用JSNI方法:

private native void addListener(Element elem) /*-{
elem.addEventListener("DOMNodeInserted", function (ev) {
$wnd.alert('added');
}, false);
}-*/;

它可以工作,但是......它已被弃用。您应该使用 MutationObserver相反。

不幸的是,MutationObserver 没有要观察的 NodeInserted 事件。我认为子树突变观察可以完成这项工作,但它对我不起作用。解决方案是观察父级上的 childList 突变:

JS:

// create an observer instance
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
alert(mutation.type);
});
});

// configuration of the observer:
var config = {
childList: true
};

// pass in the target node, as well as the observer options
observer.observe(elem, config);

并且,对于 GWT,您需要将其包装在 JSNI 方法中(您知道如何做)。

观察者回调中的mutation参数是MutationRecord对象。

因此,如果您可以获得父级,请对其使用 MutationObserver 并观察 childList 突变。如果没有,请尝试使用已弃用的 Mutation 事件。

<小时/>

我知道这不是纯粹的 GWT 解决方案,但您可以使用 GWT 方法来处理事件或突变。您只需从 JSNI 调用 GWT 方法,如下所示:

[instance-expr.]@class-name::method-name(param-signature)(arguments)

您可以在 GWT documentation 中找到所有 JSNI 信息.

关于java - GWT Node 或 Element 监听 onAttach 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38403514/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com