我发现安圭拉是如何处理这个问题的。实现 Data Extender 时,您正在扩展有关列表中显示的项目的信息,这基本上意味着您正在扩展相关项目背后的数据(模型)。
Tridion 中的每个项目在 Anguilla 框架中都有自己的类,例如,组件有自己的 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>
一旦我们有了这个,GUI 将显示我们刚刚添加的列:“附加信息”
好了,现在我们需要实现在item被编辑/签出和签入等时刷新列表...
为此,我们需要扩展模型并在我们扩展的对象中实现一些方法。在此示例中,我扩展了 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>
如您所见,我正在使用 Javascript 文件“/Scripts/PSPage.js”中定义的“Com.Tridion.PS.Extensions.UI.PSPage”类扩展页面。
处理行刷新的唯一方法如下:
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”属性,该属性显示在我的附加列中。
在处理向列表添加列时,不仅仅是添加数据扩展器。我将在my blog here 写一篇文章,提供一个完整的工作示例。
我希望这是有道理的。