Как получить доступ к свойствам компонента Tridion, например имени схемы, на основе которого он создается на странице aspx? - PullRequest
3 голосов
/ 02 апреля 2012

Я настраиваю панель инструментов ленты, добавляя к ней кнопку в версии TRIDION 2011 SP1. Когда я нажимаю на кнопку, она открывает страницу aspx. Внутри этой страницы aspx мне нужно получить доступ к имени схемы, использованной для создания этого компонента, перед созданием самого компонента (я имею в виду при создании самого компонента).

Пожалуйста, дайте мне способ решить эту проблему. Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 02 апреля 2012

Вы должны передать его вашему всплывающему окну. URI схемы доступен в объекте модели компонентов внутри CME, поэтому ваша команда кнопки может получить к ней доступ и передать ее всплывающему окну (например, в URL).

var schemaId = $display.getView().getItem().getSchemaId();
2 голосов
/ 02 апреля 2012

Если у вас есть компонент (как объект), вы можете получить его идентификатор схемы, как указано Питером.Если у вас есть только идентификатор компонента, вы можете загрузить компонент и через него добраться до схемы.

Когда вам нужно загрузить какой-либо элемент, вы должны знать, что это не синхронный вызов в 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 (так как мой пример кода не делает этого).

...