Tridion 什么';在安圭拉,isEnabled和isEnabled的区别是什么?

Tridion 什么';在安圭拉,isEnabled和isEnabled的区别是什么?,tridion,tridion-2011,Tridion,Tridion 2011,我一直在关注GUI扩展,注意示例使用了\u isEnabled或isEnabled,没有下划线。两者似乎都在扩展或可能替换现有功能 我迷路了 例如,PowerTools基类(似乎没有“扩展”现有功能)具有: PowerTools.BaseCommand.prototype.isEnabled=函数(选择,管道) { var p=该属性; 如果(!p.initialized) { 这是初始化(); } 如果(!this.isToolConfigured()) { 返回false; } 如果(此.i

我一直在关注GUI扩展,注意示例使用了
\u isEnabled
isEnabled
,没有下划线。两者似乎都在扩展或可能替换现有功能

我迷路了 例如,PowerTools基类(似乎没有“扩展”现有功能)具有:

PowerTools.BaseCommand.prototype.isEnabled=函数(选择,管道)
{
var p=该属性;
如果(!p.initialized)
{
这是初始化();
}
如果(!this.isToolConfigured())
{
返回false;
}
如果(此.isValidSelection)
{
返回此.isValidSelection(选择,管道);
}
返回true;
};
工具可以使用此基类并声明.isValidSelection,例如:

PowerTools.Commands.CountItems.prototype.isValidSelection=
函数(选择){…}
_我迷路了 我看到安圭拉使用
。\u isEnabled
实现现有功能(在代码中许多地方的Chrome控制台中)。例如,所使用的
具有:

Tridion.Cme.Commands.whereuse.prototype.\u可用=
使用的函数$可用(选择)。。。
私人职能? 我熟悉前面的下划线是私有变量的命名约定。是否以下划线“private”开头的_isEnabled和其他函数?如果是,则

  • 我们应该如何扩展(向现有代码添加附加功能)这些功能
  • 我们应该如何替换(不是让现有代码运行,而是让我们的代码以“覆盖”的方式运行)这些代码

我假设相同的方法适用于以下划线开头的其他函数,例如
\u isAvailable
,和
\u invoke

命令调用以下方法:

  • 可用
  • 我迷路了
  • 援引
  • 所有命令的基类Tridion.Core.Command都有这些方法的标准实现。在大多数情况下,此默认实现允许对命令进行扩展。它们还调用下划线方法(_isAvailable、_isEnabled和_execute)

    我不知道为什么CME命令只覆盖下划线方法。也许有人认为那样更容易。他们应该被认为是私人的(或者相当于C中的“保护”),所以对我来说这似乎是一个坏的实践。 实现适当的方法(isAvailable、isEnabled和invoke),然后使用this.callBase调用基本实现,这样会更简洁。但是,在这种情况下,您可能需要停止管道,或者覆盖下划线方法,以避免返回值被默认的下划线方法覆盖。这取决于您正在实现或扩展的命令

    简而言之:使用下划线方法可能是一种不好的做法,但核心实现似乎使您更难做到“正确”。因此,我的目标是避免使用下划线方法,但如果结果证明这样做太难,就不要担心了


    p.S.isValidSelection是一种仅适用于PowerTools的方法,它将所有命令所需的通用逻辑与每个命令的特定逻辑分开。

    PowerTools的isValidSelection有一个很好的观点。要管理管道,是否将其设置为true/false?我看到
    pipeline.stop=true为true;实际上,这意味着它不应该继续使用其他扩展或下划线方法。有点像“我最清楚,别再找其他答案了”