gpt4 book ai didi

tridion - 确保我的扩展列表始终显示 "current"数据?

转载 作者:行者123 更新时间:2023-12-04 05:04:25 26 4
gpt4 key购买 nike

当您为CME列表创建Data Extender时(例如,像this example中那样为Schema添加一列),只要您执行强制重新加载List的操作,它们都可以正常工作。

但是,某些操作不会强制重新加载列表(例如,编辑文件夹中的组件,然后保存并关闭),并且看起来Anguilla正在使用另一种机制加载已更改项目的数据,该机制仅加载该数据。有问题的项目(有意义)。

如果我希望扩展 ListView 正常运行,并且每当给定项目发生更改时(而不是仅在重新加载 ListView 时)也加载我的其他属性,我还需要做什么?

最佳答案

我发现安圭拉(Anguilla)是如何照顾这个的。实现Data Extender时,将扩展有关列表中显示的项目的信息,这基本上意味着您正在将数据(模型)扩展到相关项目的后面。

Tridion中的每个Item在Anguilla Framework中都有其自己的类,例如,一个Component拥有其自己的Tridion.ContentManager.Component javascript“class”。

话虽如此,然后回到显示组件架构名称的示例,我们实际上并未扩展模型,因为该信息已在组件中提供。但是,我们需要覆盖每种用于显示项目列表中信息的方法,在本例中为Component。

因此,当我们处理数据扩展器时,如果要完全实现此功能,我们不仅需要定义数据扩展器:

<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将显示我们刚刚添加的列:“其他信息”

好吧,现在我们需要在编辑/ checkout 项目和 checkin 项目等时实现列表刷新。

为此,我们需要扩展模型并在要扩展的对象中实现一些方法。在此示例中,我扩展了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”类来扩展Page。

处理行刷新的唯一方法如下:
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”属性,该属性显示在我的附加列中。

在将列添加到列表中时,添加的不仅仅是Data Extender。我将在 my blog here中写一个帖子,以提供一个完整的示例。

我希望这是有道理的。

关于tridion - 确保我的扩展列表始终显示 "current"数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9995335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com