Обнаружение изменения iframe в подробном представлении страницы в магнолии - PullRequest
0 голосов
/ 30 мая 2020

Есть ли способ определить, какой узел отображается, когда пользователь выбирает ссылку в приложении с подробными сведениями о страницах и изменяется только iframe? Если изменяется только iframe, мне нужен механизм, который может вызывать родительскую страницу и отправлять путь узла, который отображается в iframe. Мы запускаем Magnolia EE 5.6.11. Моя проблема в том, что у меня есть ValueChangeListener в ComboBox, который я использую в качестве versionSelector в расширении PageBar в приложении для детализации страниц.

 // 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 получает неправильное значение (ie. Событие с предыдущей страницы).

Когда кто-то активирует ссылку, PagesEditorSubApp # updateNodePath вызывает updateLocationDependentComponents, который вызывает PageBar.onLocationUpdate. В нашем случае это вызывает метод VersionSelector # setCurrentVersion. На этом этапе мне нужно будет перезагрузить вспомогательное приложение сведений о странице, чтобы прослушиватель правильно настроил новую страницу. Я пробовал использовать метод pageEditorPresenter.refre sh () в методе setCurrentVersion, но он этого не сделал.

1 Ответ

0 голосов
/ 05 июня 2020

В Magnolia 5.x вам нужно запустить ContentChangeEvent, чтобы вызвать refre sh (и надеяться, что субприложение, которое вы хотите обновить sh, слушает его, что в случае подробного описания страницы не должно быть проблема).
Или, поскольку вы упомянули LanguageSelector, вы действительно можете попытаться вызвать PageEditorPresenter напрямую, как это происходит из info.magnolia.pages.app.editor.pagebar.languageselector.LanguageSelector#languageSelected, хотя, если вам не нужно что-то изменить в презентаторе (например, locale в примере выше), это кажется довольно ненужным объединением кода.

После того, как вы перенесете свой код на Magnolia 6.x и новую платформу пользовательского интерфейса, у вас будет более удобный способ инициировать уведомление об изменении источника данных, которое все представления потребляют данные из данного источника слушают и таким образом упрощают refre sh (как показано, например, в PasteComponentAction здесь .

...