Я обнаружил, как Ангилья заботится об этом. При реализации расширителя данных вы расширяете информацию, касающуюся элементов, отображаемых в списке, что в основном означает, что вы расширяете данные (модель) за рассматриваемым элементом.
Каждый элемент в Tridion имеет свой собственный класс в Anguilla Framework, например, у компонента есть свой собственный класс «Tridion.ContentManager.Component» javascript.
Сказав это и вернувшись к примеру, который показывает имя схемы компонента, мы фактически не расширяем модель, поскольку эта информация уже доступна в компоненте. Однако нам нужно перезаписать методы, используемые для каждого из них, для отображения информации в списках, в которых находится элемент, в данном случае это Компонент.
Итак, когда мы имеем дело с Расширителем Данных, если мы хотим полностью реализовать эту функциональность, нам нужно не только определить расширитель данных:
<ext:dataextender
name="IntelligentDataExtender"
type="Com.Tridion.PS.Extensions.IntelligentDataExtender,PS.GUI.Extensions">
<ext:description>Shows extra info</ext:description>
</ext:dataextender>
Но также нам нужно определить, какой столбец мы добавляем:
<ext:lists>
<ext:add>
<ext:extension name="IntelligentColumnExtender"
assignid="IntelligentDataColumnExtender">
<ext:listDefinition>
<ext:selectornamespaces/>
<ext:columns>
<column
xmlns="http://www.sdltridion.com/2009/GUI/extensions/List"
id="IntelligentData"
type="data"
title="Additional Info"
selector="@ExtendedInfo"
translate="String"/>
</ext:columns>
</ext:listDefinition>
<ext:apply>
<ext:view name="DashboardView" />
</ext:apply>
</ext:extension>
</ext:add>
</ext:lists>
Как только мы получим это, в графическом интерфейсе отобразится добавленный столбец: «Дополнительная информация»
Что ж, теперь нам нужно добиться обновления списка, когда элемент редактируется / извлекается и извлекается и т. Д. ...
Для этого нам нужно расширить модель и реализовать несколько методов в расширяемом объекте. В этом примере я расширяю объект Page, поэтому всякий раз, когда страница редактируется, строка в списке, который мы хотим обновить, обновляется вместе с остальными ячейками таблицы.
Чтобы расширить модель, нам нужно определить, какие типы мы расширяем, в этом примере я собираюсь использовать класс «Page» в качестве примера. Прежде всего вам необходимо определить расширение модели в файле конфигурации вашего редактора:
<cfg:group name="Com.Tridion.PS.Extensions.UI.Model"
merger="Tridion.Web.UI.Core.Configuration.Resources.DomainModelProcessor"
merge="always">
<cfg:domainmodel name="Com.Tridion.PS.Extensions.UI.Model">
<cfg:fileset>
<cfg:file type="script">/Scripts/PSPage.js</cfg:file>
</cfg:fileset>
<cfg:services />
</cfg:domainmodel>
</cfg:group>
и
<ext:modelextensions>
<cfg:itemtypes>
<cfg:itemtype id="tcm:64" implementation="Com.Tridion.PS.Extensions.UI.PSPage" />
</cfg:itemtypes>
</ext:modelextensions>
Как вы можете видеть, я расширяю страницу с помощью класса "Com.Tridion.PS.Extensions.UI.PSPage", который определен в файле Javascript "/Scripts/PSPage.js".
Единственный метод, который обрабатывает обновление строки, это:
Com.Tridion.PS.Extensions.UI.PSPage.prototype.getListItemXmlAttributes
= function PSPage$getListItemXmlAttributes(customAttributes) {
var attribs = {};
var p = this.properties;
if (customAttributes) {
for (var attr in customAttributes) {
attribs[attr] = customAttributes[attr];
}
}
//This adds my custom column back when the item is updated
attribs["ExtendedInfo"] = p.extendedInfo;
return this.callBase(
"Tridion.ContentManager.Page",
"getListItemXmlAttributes",
[attribs])
};
Как вы видите, я реализую атрибут "ExtendedInfo", который отображается в моем дополнительном столбце.
Существует больше, чем просто добавление расширителя данных при работе с добавлением столбца в наши списки. Я напишу пост в моем блоге здесь , чтобы привести полностью рабочий пример.
Надеюсь, это имеет смысл.