我正在通过在TRIDION 2011 SP1版本中添加一个按钮来自定义功能区工具栏。 当我点击按钮时,它将打开一个aspx页面。在创建组件本身之前,我需要访问用于创建该组件的模式的名称(我的意思是在创建组件时说)。
请给我一个解决这个问题的方法。提前致谢。
答案 0 :(得分:4)
你应该将它传递给你的弹出窗口。模式的URI在CME中的Component模型对象上可用 - 因此您的button命令可以访问它并将其传递给弹出窗口(例如,在URL中)。
var schemaId = $display.getView().getItem().getSchemaId();
答案 1 :(得分:2)
如果您有组件(作为对象),您可以像Peter所说的那样获得它的模式ID。如果您只有组件ID,则可以加载组件并通过该组件获取模式。
当您需要加载任何项目时,您必须知道它不是UI API中的同步调用,因此您应该使用委托方法。例如:
Example.prototype._loadItemInformation = function Example$_loadItemInformation(itemId, reload) {
var item = $models.getItem(itemId);
if (item) {
var self = this;
function Example$_loadItemInformation$_onItemLoaded() {
$evt.removeEventHandler(item, "load", Example$_loadItemInformation$_onItemLoaded);
// proceed with the actions on the loaded item here
};
if (item.isLoaded(true) && !reload) {
Example$_loadItemInformation$_onItemLoaded();
}
else {
$evt.addEventHandler(item, "load", Example$_loadItemInformation$_onItemLoaded);
//$evt.addEventHandler(item, "loadfailed", Example$_loadItemInformation$_onItemLoadFailed);
item.load(reload, $const.OpenMode.VIEW);
}
}
};
还要注意该项可能无法加载,您实际上也应该为loadfailed注册一个事件处理程序(因为我的示例代码忽略了)。