Tridion命令扩展如何找到它扩展的命令?

时间:2012-09-13 16:17:47

标签: tridion

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

但现在在MyCommandExtension的JavaScript中,如何确定最初触发的命令?

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

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

  

“DisabledCommand”

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

如何从MyCommandExtension找到原始命令?

2 个答案:

答案 0 :(得分:3)

简短回答:我不能。

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

<磷>氮

答案 1 :(得分:1)

您无法找到原始命令的内容。假设扩展命令特定于它扩展的命令,因此将知道它正在扩展的命令。在创建适用于不同命令的通用扩展时,我可以看到如何知道配置是什么有用。

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

要解决此问题,您可以使用逻辑创建基本命令 - 该命令将其作为参数扩展的命令的名称。然后为要扩展的每个命令创建特定的类,只需调用base命令并传入名称。

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