在拆分窗格模式下更改ICN contentViewer选项卡标题?

时间:2018-05-16 05:35:01

标签: dojo ibm-content-navigator

我需要更改"标题"对于ICN Viewer中显示的每个文档,在运行时动态生成。我将从文档属性

中读取新的查看器标签标题

环境:ICN 2.0.3 CM8.5 WAS 8.5.5

CODE SO FAR:

  1. 我通过挂钩" ecm.model.desktop,onChange"找到了PARTIAL解决方案:

    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. 我能够为在同一个查看器中打开的后续文档扩展此项,并通过" remove()"进行优化。初始调用后的处理程序。这是完整的代码:

    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小部件或对象变量的任何事件。

  4. 提前谢谢!

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

    附录:

    非常感谢Ivo Jonker,他建议修改小部件原型 " 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. 根据Ivo的建议,我像这样覆盖原型方法:

          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 :(得分:1)

如果我理解正确,您希望在打开文档时在导航器查看器中显示不同的标题标题(而不是文档标题)?

这个怎么样:

您在查看器中打开的每个文档都包含在ecm.widget.viewer.model.ViewerItem中,该​​文件公开getHtmlName,该getHtmlName返回选项卡中使用的名称。

您的解决方案是实现自己的getHtmlName。

不幸的是,ViewerItem是在ecm.widget.viewer.ContentViewer #_open中构建的,然后传递给ecm.widget.viewer.ContentViewer #_openTab。因此,您要么通过与IBM私有方法混合来违反最佳实践,要么您将采用通用方法并且只需替换ecm.widget.viewer.model.ViewerItem.prototype.getHtmlName < / p>