2

Tridion 的用户界面允许您扩展特定命令,这是修改某些现有命令的行为的好方法。在编辑器的配置文件中,这是通过如下部分完成的:

<ext:commands>
  <ext:command name="TextUnderline" extendingcommand="MyTextUnderline"/>
  <ext:command name="TextStrikethrough" extendingcommand="MyTextStrikethrough"/>

我正在研究一个通用命令扩展类,可用于修改许多命令的行为:

<ext:commands>
  <ext:command name="TextUnderline" extendingcommand="MyCommandExtension"/>
  <ext:command name="TextStrikethrough" extendingcommand="MyCommandExtension"/>

因此,在第二个配置片段中,我们对和进行了相同的MyCommandExtension扩展。TextUnderlineTextStrikethrough

但是现在在我的 JavaScript 中,我MyCommandExtension如何确定最初触发了哪个命令?

MyCommandExtension.prototype.isAvailable = function (selection, pipeline) {
  ...
  console.log(this.properties.name);
  ...
};

在这种情况下,this.properties.name将被记录为不太有用但完全正确:

“禁用命令”

我怀疑该信息在pipeline参数中的某处可用,但尚未找到。

如何从中找出原始命令MyCommandExtension

4

2 回答 2

3

简短的回答:我不能。

我不得不做类似的事情,最终不得不扩展各种命令并将“当前”命令设置为我的“_execute”调用的一部分(所以我现在需要调用_execute(selection, pipeline, originalCommand)我的命令。

ñ

于 2012-09-13T16:41:01.700 回答
1

您无法找出原始命令是什么。假设是扩展命令特定于它扩展的命令,因此会知道它正在扩展哪个命令。在创建适用于不同命令的通用扩展时,我可以看到了解配置是多么有用。

也许您可以将此添加为增强请求?

要暂时解决它,您可以使用您的逻辑创建一个基本命令 - 它采用它作为参数扩展的命令的名称。然后为您要扩展的每个命令创建特定的类,只需调用基本命令并传入名称。

换句话说,使用所有必需的方法创建一个 BaseExtendingCommand - 然后创建一个 TextUnderlineExtendingCommand 和 TextStrikethroughExtendingCommand,它们调用 BaseExtendingCommand 上的方法(并分别传入“TextUnderline”和“TextStrikethrough”作为参数)

于 2012-09-24T10:15:15.143 回答