【问题标题】:How can a Tridion command extension find out the command it extends?Tridion 命令扩展如何找出它扩展的命令?
【发布时间】:2012-09-13 16:17:47
【问题描述】:

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 将被记录为不太有用但完全正确:

“禁用命令”

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

如何从MyCommandExtension 中找出原始命令?

【问题讨论】:

    标签: tridion


    【解决方案1】:

    简短回答:我不能。

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

    没有

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-27
        • 2016-09-07
        • 2015-12-19
        • 2021-07-17
        • 1970-01-01
        • 2017-12-11
        • 1970-01-01
        • 2021-05-23
        相关资源
        最近更新 更多