在拆分窗格模式下更改 ICN contentViewer 的选项卡标题?
Change ICN contentViewer's tab title in split pane mode?
我需要在运行时动态更改 ICN 查看器中显示的每个文档的 "title"。我将从文档属性中读取新的查看器选项卡标题
环境:ICN 2.0.3 CM8.5 为 8.5.5
到目前为止的代码:
我通过挂钩找到了部分解决方案 "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);
});
...
我能够为在同一查看器中打开的后续文档扩展它,并在初始调用后由 "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)
当前问题:
问:如何更改拆分标签的标签(垂直或水平)?
到目前为止,我 没有 能够找到我可以触发的任何 ICN/ECM 小部件或 object 变量的任何事件。
提前致谢!
============================================= ==
附录:
非常感谢 Ivo Jonker 提出的修改小部件原型的建议
"getHtmlName()" 方法。成功了!
具体来说:
我正在从 ICN 插件调用此代码。我在插件的基础 .js 文件中设置了事件处理程序,但它实际上在新的独立查看器中被调用 window.
原来的原型是这样的:
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;
};
如果我没理解错的话,您想在打开文档时在导航器查看器中显示不同的 tab-title(而不是文档标题)吗?
这个怎么样:
您在查看器中打开的每个文档都包含在一个 ecm.widget.viewer.model.ViewerItem 中,它公开了 returns 选项卡中使用的名称的 getHtmlName。
您的解决方案是实现您自己的 getHtmlName。
不幸的是,ViewerItem 是在 ecm.widget.viewer.ContentViewer#_open 中构建的,然后传递给 ecm.widget.viewer.ContentViewer#_openTab。因此,您要么通过混合 IBM 私有方法来违反最佳实践,要么您将采用通用方法并仅替换 ecm.widget.viewer.model.ViewerItem.prototype.getHtmlName
我需要在运行时动态更改 ICN 查看器中显示的每个文档的 "title"。我将从文档属性中读取新的查看器选项卡标题
环境:ICN 2.0.3 CM8.5 为 8.5.5
到目前为止的代码:
我通过挂钩找到了部分解决方案 "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); }); ...
我能够为在同一查看器中打开的后续文档扩展它,并在初始调用后由 "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)
当前问题:
问:如何更改拆分标签的标签(垂直或水平)?
到目前为止,我 没有 能够找到我可以触发的任何 ICN/ECM 小部件或 object 变量的任何事件。
提前致谢!
============================================= ==
附录:
非常感谢 Ivo Jonker 提出的修改小部件原型的建议 "getHtmlName()" 方法。成功了!
具体来说:
我正在从 ICN 插件调用此代码。我在插件的基础 .js 文件中设置了事件处理程序,但它实际上在新的独立查看器中被调用 window.
原来的原型是这样的:
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; };
如果我没理解错的话,您想在打开文档时在导航器查看器中显示不同的 tab-title(而不是文档标题)吗?
这个怎么样:
您在查看器中打开的每个文档都包含在一个 ecm.widget.viewer.model.ViewerItem 中,它公开了 returns 选项卡中使用的名称的 getHtmlName。
您的解决方案是实现您自己的 getHtmlName。
不幸的是,ViewerItem 是在 ecm.widget.viewer.ContentViewer#_open 中构建的,然后传递给 ecm.widget.viewer.ContentViewer#_openTab。因此,您要么通过混合 IBM 私有方法来违反最佳实践,要么您将采用通用方法并仅替换 ecm.widget.viewer.model.ViewerItem.prototype.getHtmlName