在拆分窗格模式下更改 ICN 内容查看器的选项卡标题?



我需要在运行时动态更改ICN Viewer中显示的每个文档的"标题"。 我将从文档属性中读取新的查看器选项卡标题。

环境: ICN 2.0.3 CM8.5 WAS 8.5.5

到目前为止的代码:

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

    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. 当前问题:如何更改拆分选项卡的标签(垂直或水平(?

到目前为止,我还没有找到任何可以触发的ICN/ECM小部件或对象变量的任何事件。

似乎您希望在打开文档时在导航器查看器中显示不同的选项卡标题(而不是文档标题(。

怎么样?

您在查看器中打开的每个文档都包装在一个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

(我代表问题作者发布答案,将其移至答案部分(。

非常感谢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;
    };
    

相关内容

  • 没有找到相关文章

最新更新