在 magnolia 的页面详细信息视图中检测 iframe 的变化

Posted

技术标签:

【中文标题】在 magnolia 的页面详细信息视图中检测 iframe 的变化【英文标题】:Detect a change of iframe in page detail view in magnolia 【发布时间】: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 我在上面的主要问题中解释得更好。 【参考方案1】:

在 Magnolia 5.x 中,您需要触发 ContentChangeEvent 来触发刷新(并希望您要刷新的子应用能够监听它,这在页面详细信息子应用的情况下应该不成问题)。 或者,既然你提到了LanguageSelector,你确实可以尝试直接调用PageEditorPresenter,就像它从info.magnolia.pages.app.editor.pagebar.languageselector.LanguageSelector#languageSelected 调用一样,除非你需要修改演示者中​​的某些内容(例如,上面示例中的语言环境),这似乎相当代码的不必要耦合。

将代码迁移到 Magnolia 6.x 和新的 UI 框架后,您可以更方便地触发数据源更改通知,所有使用来自给定源的数据的视图都会监听并促进以这种方式刷新(如图所示例如PasteComponentActionhere。

【讨论】:

以上是关于在 magnolia 的页面详细信息视图中检测 iframe 的变化的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Magnolia 5.7 中检测设备并渲染适当的图像变化

Magnolia 中用于内容列表的分页表视图

如何使用滚动视图单击列表部分内的项目以导航到详细信息页面 SwiftUI

如何使用 Vuejs 在单独的页面上显示详细视图

营销标签未在 Magnolia 页面中呈现内容

Magnolia CMS:如何配置代理和绕过