在木兰花中检测到页面细节视图中iframe的变化。

问题描述 投票:0回答:1

当用户在页面详情应用中选择一个链接,而只有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()方法,但没有做到。

magnolia
1个回答
0
投票

在Magnolia 5.x中,你需要启动以下功能。ContentChangeEvent 来触发刷新(并希望你想刷新的子应用能监听到它,在页面细节子应用的情况下,这应该不是一个问题)。或者,既然你提到了 LanguageSelector,你确实可以尝试拨打 PageEditorPresenter 直接从 info.magnolia.pages.app.editor.pagebar.languageselector.LanguageSelector#languageSelected除非你需要在presenter中修改一些东西(比如上面例子中的locale),否则这似乎是相当不必要的代码耦合。

一旦你把你的代码迁移到Magnolia 6.x和新的UI框架,你有更方便的方式来触发数据源变化的通知,所有从给定源中消耗数据的视图都会听到,并以这种方式促进刷新(如在以下例子中所示 PasteComponentAction 此处.

© www.soinside.com 2019 - 2024. All rights reserved.