- 私は何を示唆している はこのような何かを試してみることです。私はAJAXでこれをやっているので、常にtarget.add()を呼び出す必要があります。
私の解決策は、クラスMyTreeがLinkTreeを拡張し、そのクラスでnewNodeComponent()をオーバーライドすることです。
私のアプリケーションではすべてIndexPage.classで発生し、コンポーネントを置き換えただけなので、IndexPage.ClassにメソッドhandleSelection()を追加しました(BasePage extends Webページを拡張します)。質問やコメントが欲しかった:そこ私は、私は他に、これはpropperly説明されている願っていますIndexPage
Public Class MyTree extends Linktree{
protected Component newNodeComponent(String id, IModel<Object> model) {
@Override
protected void onNodeLinkClicked(Object node, BaseTree tree, AjaxRequestTarget target) {
super.onNodeLinkClicked(node, tree, target);
((IndexPage)getPage()).handleSelection(target, (TreeNode)node);
}
@Override
protected ResourceReference getResourceFolderOpen(Object node) {
return getResourceForNode(node);
}
@Override
protected ResourceReference getResourceFolderClosed(Object node) {
return getResourceForNode(node);
}
@Override
protected ResourceReference getResourceItemLeaf(Object node) {
return super.getResourceItemLeaf(node);
}
@Override
protected ResourceReference getImageResourceReference(BaseTree tree, Object node) {
return getResourceForNode(node);
}
}
}
にコンポーネントを交換する方法を、クリックされたnodeObjectに基づいて、決定します!
Hm。それはどこから選んだの? –
replaceWithを呼び出す行について: "置換コンポーネントは、置換するコンポーネントと同じIDを持つ必要があります" これまでのところ、コンストラクタで初期化する新しいLabelに対してreplaceWith関数を呼び出す必要があります。 また、replaceを呼び出すと、元のラベル= newLabelも同様に行う必要があります。 私はWicket 6.20を使用しています。確かめるために、同じ状況について話しています。 :) – BlondCode