Alv*_*yes 7 tridion tridion-2011
我一直在下面GUI扩展和通知示例使用两种_isEnabled或isEnabled,没有下划线.两者似乎都可以扩展或可能替换现有功能.
例如,PowerTools基类(似乎不"扩展"现有功能)具有:
PowerTools.BaseCommand.prototype.isEnabled = function(selection, pipeline)
{
var p = this.properties;
if (!p.initialized)
{
this.initialize();
}
if (!this.isToolConfigured())
{
return false;
}
if (this.isValidSelection)
{
return this.isValidSelection(selection, pipeline);
}
return true;
};
Run Code Online (Sandbox Code Playgroud)
工具可以使用此基类并声明.isValidSelection,例如:
PowerTools.Commands.CountItems.prototype.isValidSelection =
function (selection) { ... }
Run Code Online (Sandbox Code Playgroud)
我看到Anguilla ._isEnabled用于现有功能(在代码中的许多地方的Chrome控制台中).例如,WhereUsed有:
Tridion.Cme.Commands.WhereUsed.prototype._isAvailable =
function WhereUsed$_isAvailable(selection) ...
Run Code Online (Sandbox Code Playgroud)
我熟悉前面的下划线是私有变量的命名约定._isEnabled和其他以下划线"私有"开头的函数是什么?如果是的话,那么
我假设相同的方法适用于以下划线开头的其他函数,例如_isAvailable,和_invoke.
为命令调用以下方法:
所有命令的基类 - Tridion.Core.Command - 都具有这些方法的标准实现.在大多数情况下,此默认实现允许扩展命令.它们还调用下划线方法(_isAvailable,_isEnabled和_execute).
我不知道为什么CME命令只覆盖下划线方法.也许有人认为这样更容易.它们应该被认为是私有的(或者相当于C#中的"受保护"),所以它实际上对我来说似乎是一种不好的做法.
实现适当的方法(isAvailable,isEnabled和invoke)然后使用this.callBase调用基本实现会更清晰.但是,在这种情况下,您可能需要停止管道,或者还要覆盖下划线方法,以避免您的返回值被默认的下划线方法覆盖.这取决于您正在实施或扩展的命令.
简而言之:使用下划线方法可能是不好的做法,但Core实现似乎确实让你更难以"正确"地执行它.因此,我的目标是避免使用下划线方法,但如果事实证明这样做太难,那就不要大汗淋漓.
PS isValidSelection是一种仅限PowerTools的方法,它将所有需要的公共逻辑与特定于每个命令的逻辑分开.
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |