如何访问Tridion组件的属性,如模式名称,基于它在aspx页面中创建?

时间:2012-04-02 08:58:56

标签: tridion

我正在通过在TRIDION 2011 SP1版本中添加一个按钮来自定义功能区工具栏。 当我点击按钮时,它将打开一个aspx页面。在创建组件本身之前,我需要访问用于创建该组件的模式的名称(我的意思是在创建组件时说)。

请给我一个解决这个问题的方法。提前致谢。

2 个答案:

答案 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注册一个事件处理程序(因为我的示例代码忽略了)。