【发布时间】:2020-05-30 06:25:03
【问题描述】:
当用户在页面详细信息应用程序中选择一个链接并且只有 iframe 更改时,有没有办法检测正在呈现哪个节点?如果只是 iframe 正在改变,我需要一种机制来调用父页面并发送正在 iframe 中呈现的节点的路径。我们运行 Magnolia EE 5.6.11。 我的问题是我在 ComboBox 中有一个 ValueChangeListener,我将其用作页面详细信息应用程序的 PageBar 扩展中的 versionSelector。
// Create a selection component;
private ComboBox versionSelector = new ComboBox();
private Listener listener;
private boolean isSettingValue;
public VersionSelectorViewImpl(){
construct();
}
private void construct() {
versionSelector.setVisible(false);
versionSelector.setSizeUndefined();
versionSelector.setImmediate(true);
versionSelector.setNullSelectionAllowed(false);
versionSelector.setTextInputAllowed(false);
//setup listener for the selected item
versionSelector.addValueChangeListener(new Property.ValueChangeListener() {
@Override
public void valueChange(Property.ValueChangeEvent event) {
if (listener != null) {
listener.versionSelected((Object) event.getProperty().getValue());
}
}
});
}
实现类似于 LanguageSelector 或 VariantSelector。当有人激活页面模板中的超链接时,iframe 会发生变化,并且 valueChange 方法检索到错误的值(即事件来自上一页)。
当有人激活链接时,PagesEditorSubApp#updateNodePath 调用 updateLocationDependentComponents,后者调用 PageBar.onLocationUpdate。这在我们的例子中调用了 VersionSelector#setCurrentVersion 方法。此时我需要重新加载页面详细信息子应用程序,以便将侦听器正确设置为新页面。我尝试在 setCurrentVersion 方法中使用 pageEditorPresenter.refresh() 方法,但没有成功。
【问题讨论】:
-
您需要在哪里检测更改?在正在呈现的模板中或(自定义?)页面应用程序中或...?
-
嗨@Jan 我在上面的主要问题中解释得更好。
标签: magnolia