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
扩展为TextUnderline
和TextStrikethrough
。
但现在在MyCommandExtension
的JavaScript中,如何确定最初触发的命令?
MyCommandExtension.prototype.isAvailable = function (selection, pipeline) {
...
console.log(this.properties.name);
...
};
在这种情况下,this.properties.name
将被记录为不太有用但完全正确的:
“DisabledCommand”
我怀疑该信息在pipeline
参数的某处可用,但尚未找到。
如何从MyCommandExtension
找到原始命令?
答案 0 :(得分:3)
简短回答:我不能。
我必须做类似的事情,最后必须扩展各种命令,并将“当前”命令设置为我的“_execute”调用的一部分(所以我现在将_execute(selection, pipeline, originalCommand)
称为我的命令。
答案 1 :(得分:1)
您无法找到原始命令的内容。假设扩展命令特定于它扩展的命令,因此将知道它正在扩展的命令。在创建适用于不同命令的通用扩展时,我可以看到如何知道配置是什么有用。
也许您可以将其添加为增强请求?
要解决此问题,您可以使用逻辑创建基本命令 - 该命令将其作为参数扩展的命令的名称。然后为要扩展的每个命令创建特定的类,只需调用base命令并传入名称。
换句话说,创建一个包含所有必需方法的BaseExtendingCommand - 然后是TextUnderlineExtendingCommand和TextStrikethroughExtendingCommand,它们调用BaseExtendingCommand上的方法(并分别传入“TextUnderline”和“TextStrikethrough”作为参数)