我需要更改"标题"对于ICN Viewer中显示的每个文档,在运行时动态生成。我将从文档属性
中读取新的查看器标签标题环境:ICN 2.0.3 CM8.5 WAS 8.5.5
CODE SO FAR:
我通过挂钩" 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);
});
...
我能够为在同一个查看器中打开的后续文档扩展此项,并通过" 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)
当前问题:
问:如何更改分割标签的标签(垂直或水平)?
到目前为止,我已经 NOT 能够找到我可以触发的任何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;
};
答案 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>