Изменить заголовок вкладки ICN contentViewer в режиме разделенной панели? - PullRequest
0 голосов
/ 16 мая 2018

Мне нужно изменить «заголовок» для каждого документа, отображаемого в ICN Viewer, динамически, во время выполнения.Я прочитаю заголовок новой вкладки средства просмотра из свойств документа

ОКРУЖАЮЩАЯ СРЕДА: ICN 2.0.3 CM8.5 БЫЛ 8.5.5

КОД ТАК FAR:

  1. Я нашел ЧАСТИЧНОЕ решение, перехватив "ecm.model.desktop, onChange":

    aspect.after(ecm.model.desktop, 'onChange', function() {
       var contentViewer = dijit.byId('contentViewer');
       if (contentViewer) {
          var viewerTabTitleDef = new ViewerTabTitleDef ();
          contentViewer.mainTabContainer.getChildren().forEach(function(child) {
             viewerTabTitleDef.changeTitle(viewerTabTitleDef.self,
                child.controlButton, child.contentViewerPane.viewerItem.item);
          });
          ...
    
  2. Мне удалось расширить его для последующих документов, открытых в том же средстве просмотраи оптимизируется путем «удаления ()» обработчика после этого начального вызова.Вот полный код:

    var kill = aspect.after(ecm.model.desktop, 'onChange', function() {
    
       var contentViewer = dijit.byId('contentViewer');
       // "contentViewer" will be "unknown" unless viewer invoked
       console.log('onChange: contentViewer', contentViewer);  
    
       if (contentViewer) {
          console.log("new ViewerTabTitleDef()...");
          kill.remove();
          var viewerTabTitleDef = new ViewerTabTitleDef ();
          contentViewer.mainTabContainer.getChildren().forEach(function(child) {
              // For initially opened tabs
              console.log('initially opened: child', child);
              viewerTabTitleDef.changeTitle(viewerTabTitleDef.self, child.controlButton, child.contentViewerPane.viewerItem.item);
          });
          aspect.after(contentViewer.mainTabContainer, 'addChild', function(child) {
              // For tabs added after the viewer was opened
              console.log('subsequently opened: child', child);
              viewerTabTitleDef.changeTitle(viewerTabTitleDef, child.controlButton, child.contentViewerPane.viewerItem.item);
          }, true);
       } // end if contentViewer
    
    });  // end aspect.after(onChange desktop)
    
  3. ТЕКУЩАЯ ПРОБЛЕМА:

    В: Как изменить метку для разделенной вкладки (вертикальной или горизонтальной)?

    До сих пор у меня NOT не было возможности найти любое событие для любого виджета ICN / ECM или переменной объекта, к которому я могу вызвать.

Заранее спасибо!

====================================================

ADDENDUM:

Большое спасибо Иво Джонкеру за его предложение изменить метод getHtmlName () прототипа виджета.Это сработало!

В частности:

  1. Я вызываю этот код из плагина ICN.Я установил обработчики событий в базовом файле .js моего плагина, но он фактически вызывается в новом отдельном окне просмотра.

  2. Исходный прототип выглядел так:

    getHtmlName: function() {
        var methodName = "getHtmlName";
        this.logEntry(methodName);
    
        var displayName = this.item.getDisplayValue("{NAME}");
        if (displayName == "") {
            displayName = this.item.name;
        }
    
        var htmlName = entities.encode(displayName);
        this.logExit(methodName);
        return htmlName;
    },
    
  3. По предложению Иво я отказался от метода-прототипа следующим образом:

        myPluginDojo.viewerTabTitleDef = viewerTabTitleDef;
        ...
        ecm.widget.viewer.model.ViewerItem.prototype.getHtmlName = function () {
            console.log("NEW getHtmlName()...");
            var displayName = myPluginDojo.viewerTabTitleDef.getTitle(this.item);
            return displayName;
        };
    

1 Ответ

0 голосов
/ 18 мая 2018

Если я правильно вас понимаю, вы хотите показывать другой заголовок вкладки (вместо заголовка документа) в окне просмотра навигатора при каждом открытии документа?

Как насчет этого:

Каждый документ, который вы открываете в программе просмотра, обернут в ecm.widget.viewer.model.ViewerItem, который предоставляет getHtmlName, который возвращает имя, используемое на вкладке.

Ваше решение будет заключаться в реализации вашего собственного getHtmlName.

К сожалению, ViewerItem создается в ecm.widget.viewer.ContentViewer # _open и затем передается в ecm.widget.viewer.ContentViewer # _openTab.Таким образом, вы либо нарушите передовую практику, смешавшись с частными методами IBM, либо выберете общий подход и просто замените ecm.widget.viewer.model.ViewerItem.prototype.getHtmlName

...