我張貼我的第二個答案,因爲現在我知道你不能改變如何將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事件被觀察到。我認爲subtree
突變觀察會做這項工作,但它並沒有爲我工作。解決的辦法是觀察父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
突變。如果不是,請嘗試使用已棄用的突變事件。
我知道這不是純粹的GWT解決方案,但可以使用GWT方法處理事件或突變。你只需要調用GWT方法形式JSNI這樣的:
[instance-expr.]@class-name::method-name(param-signature)(arguments)
你會發現在GWT documentation所有JSNI信息。
不幸的是我不能改變父母添加'myDiv'的方式。如果我可以,我會在以任何方式向父母添加元素之後「親手處理」。 –