在拆分窗格模式下更改ICN contentViewer的选项卡标题?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在拆分窗格模式下更改ICN contentViewer的选项卡标题?相关的知识,希望对你有一定的参考价值。
我需要在运行时动态地更改ICN Viewer中显示的每个文档的“标题”。我将从文档属性中读取新的查看器选项卡标题
环境:ICN 2.0.3 CM8.5 WAS 8.5.5
代码很远:
- 我通过挂钩“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); }); ...
- 我能够为在同一个查看器中打开的后续文档扩展它,并通过在初始调用后“删除()”处理程序进行优化。这是完整的代码:
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)
- 当前问题: 问:如何更改拆分标签(垂直或水平)的标签? 到目前为止,我无法找到任何可以触发的ICN / ECM小部件或对象变量的事件。
先感谢您!
===============================================
附录:
非常感谢Ivo Jonker,他建议修改小部件原型的“gethtmlName()”方法。有效!
特别:
- 我正在从ICN插件调用此代码。我在插件的基本.js文件中设置了事件处理程序,但它实际上是在新的独立查看器窗口中调用的。
- 原始原型看起来像这样:
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; },
- 按照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; };
答案
如果我理解正确,您希望在打开文档时在导航器查看器中显示不同的标题标题(而不是文档标题)?
这个怎么样:
您在查看器中打开的每个文档都包含在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
以上是关于在拆分窗格模式下更改ICN contentViewer的选项卡标题?的主要内容,如果未能解决你的问题,请参考以下文章