私は持っている:
ListView
Button
WebMarkupContainer
(ポップアップコンテンツコンテナ)
そのため、 にデータを入力するときに、 ボタンListView
に を追加AjaxEventBehavior
します。getAjaxCallDecorator()
各ボタンから JavaScript 関数を呼び出す必要があるため、もオーバーライドします。したがって、関数では、を使用してマークアップ IDdecorateScript
をオーバーライドします。これは機能します。に対しても同じことを行いますが、少なくとも を呼び出すと機能します。しかし、生成された HTML に移動すると、そこにはありません! なぜこうなった?WebMarkupContainer
setMarkupId()
Button
getMarkupId()
コードは次のとおりです ( populateItem
fromの内部にありますListView
)。
infoBtn.add(new AjaxEventBehavior("onclick") {
@Override
protected void onEvent(AjaxRequestTarget target) {
}
@Override
protected IAjaxCallDecorator getAjaxCallDecorator() {
return new IAjaxCallDecorator() {
@Override
public CharSequence decorateScript(Component component, CharSequence script) {
StringBuilder jsScript = new StringBuilder();
infoPopoverContent.setMarkupId(infoPopoverContent.getMarkupId(true) + String.valueOf(pos));
infoBtn.setOutputMarkupPlaceholderTag(true);
infoBtn.setMarkupId(infoBtn.getMarkupId() + String.valueOf(pos));
jsScript.append("$('#" + infoBtn.getMarkupId() + "').popover({");
jsScript.append("html:true,");
jsScript.append("placement:'bottom',");
jsScript.append("content:function() {");
jsScript.append("return $('#");
jsScript.append(infoPopoverContent.getMarkupId());
jsScript.append("').html();");
jsScript.append("}");
jsScript.append("});");
logger.debug(jsScript.toString());
pos++;
return jsScript;
}
@Override
public CharSequence decorateOnSuccessScript(Component component,
CharSequence script) {
// TODO Auto-generated method stub
return null;
}
@Override
public CharSequence decorateOnFailureScript(Component component,
CharSequence script) {
// TODO Auto-generated method stub
return null;
}
};
}
});