安圭拉 _isEnabled 和 isEnabled 有什么区别?

2023-11-21

我一直在关注 GUI 扩展并注意到示例使用其中之一_isEnabled or 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;
};

工具可以使用此基类并声明 .isValidSelection,例如:

PowerTools.Commands.CountItems.prototype.isValidSelection = 
                                       function (selection) { ... }

_已启用

我看到安圭拉使用._isEnabled对于现有功能(在 Chrome 控制台的代码中的许多地方)。例如,WhereUsed has:

Tridion.Cme.Commands.WhereUsed.prototype._isAvailable =
                      function WhereUsed$_isAvailable(selection) ...

私有函数?

我熟悉前面的下划线是私有变量的命名约定。 _isEnabled 和其他以下划线开头的函数是“私有的”吗?如果是这样,那么

  • 我们应该怎样extend(向现有代码添加附加功能)这些功能?
  • 我们应该怎样replace(不运行现有代码,而是运行我们的代码,就像“覆盖”一样)这些?

我假设相同的方法适用于以下划线开头的其他函数,例如_isAvailable, and _invoke.


命令调用以下方法:

  1. 可用
  2. 已启用
  3. invoke

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

我不知道为什么 CME 命令只覆盖下划线方法。也许有人认为这样更容易。它们应该被视为私有(或相当于 C# 中的“受保护”),因此对我来说这实际上是一种不好的做法。

实现正确的方法(isAvailable、isEnabled 和 invoke)然后使用 this.callBase 调用基本实现会更清晰。但是,在这种情况下,您可能需要停止管道,或者还覆盖下划线方法,以避免返回值被默认下划线方法覆盖。这取决于您正在实施或扩展的命令。

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

附: isValidSelection 是一种仅限 PowerTools 的方法,它将它们都需要的通用逻辑与每个命令特定的逻辑分开。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安圭拉 _isEnabled 和 isEnabled 有什么区别? 的相关文章

随机推荐

  • Spring Boot 在 Gradle 中获取包的属性

    我正在尝试将我的项目从 Maven 构建转换为 Gradle 目前项目使用Spring Boot 在我当前的 Maven 配置中 我有
  • 如何解决VScode UnsupportedClassVersionError?

    Problem 当我运行 HelloWorld 时 它返回 java lang UnsupportedClassVersionError HelloWorld 已编译 通过更新版本的 Java 运行时 类文件版本 52 65535 该版本的
  • 函数中的自动参数类型

    我想知道标准委员会是否考虑扩展C 14auto关键字来推导函数模板参数类型 就像现在泛型 lambda 中存在的那样 正如这个答案中很好地描述的那样 因为它适用于 lambda 函数 所以它也应该适用于任何函数 当然 这对于经典语法来说是完
  • JavaScript 中的词法范围

    我对 JavaScript 中的作用域到底是如何工作的感到有点困惑 主要是词法作用域 我知道全局作用域中的变量可以在任何地方访问 在 JavaScript 中创建新作用域的唯一方法是通过创建函数 或在 ES6 中使用 let 但是 我不太明
  • Flutter如何手动安装包

    有没有办法手动下载包并安装 使用他们的包管理器真是令人沮丧 这次下载只需要 0 4 秒 但每次尝试多次后都无法下载 每次都要等待几分钟 实在是太不可靠了 至少有办法让我看到进度条之类的吗 我在浏览器中 2 秒就能下载的东西却每次都能成功 下
  • CreateProcess 在 Windows 7 下不会创建额外的控制台窗口?

    我正在尝试使用 CreateProcess 运行一个进程 并在单独的控制台窗口中独立运行它 我可以使用 system 函数来实现这一点 但我更喜欢 CreateProcess 因为它使我可以指定环境和工作目录 获取进程的句柄 以及在需要时通
  • 安装 PostgreSQL 9.0 后如何更改 NAMEDATALEN 配置?

    我支持一些旧版 PostgreSQL 8 3 4 数据库 并将它们迁移到一些较新的 Windows Server 2008 硬件上 我被告知 NAMEDATALEN 数字需要高于默认值 据我了解 NAMEDATALEN 配置不存在于配置文件
  • Capistrano 3 资产:预编译需要数小时。停在 css 文件处

    正如它所说 我无法让 capistrano 3 做assets precompile正确 即使几个小时后 它仍然说写信给 css服务器上的文件 UPDATE 我正在玩 我尝试了 m1 medium 当它到达某个点时 就会发生同样的事情 它只
  • 将值从 SQL Server 导出到 txt 文件

    我想将 SQL Server 中的值导出到 txt 文件 我了解 BCP 在那里我需要提供查询或表名称才能从表中导出数据 我不想导出数据 但我想导出分配给变量的值 我该怎么做 有什么帮助吗 使用查询收集要导出的变量 像这样的东西 DECLA
  • 找不到模块“模块名称”的声明文件。 '/path/to/module-name.js' 隐式具有 'any' 类型

    我读的是 TypeScript模块分辨率 works 我有以下存储库 ts stack di 编译后目录结构如下 dist annotations d ts annotations js index d ts index js inject
  • git 将分支推送到具有不同名称的新存储库

    如何使用分支的新名称将分支推送到不同的存储库 例如我有一个分支feature1在回购协议上abc我想推送到回购协议xyz并使其成为主分支 我尝试使用重命名远程git分支但在新的存储库上执行 git 克隆后 我收到了错误消息 git 警告 远
  • 我可以通过蓝鸟承诺提前打破链条吗?

    我不一定想犯错误 但我有 getFromDb then tradeData gt if not tradeData DO NOT CONTINUE THE CHAIN else getLatestPrice tradeData then l
  • 无法使用冒号映射 docker 卷

    当主机目录路径包含冒号时 有没有办法将主机目录挂载为数据卷 例子 v colon path test data 在这种情况下 它正在治疗data作为附加选项 这 colon path test是正确的 Unix 路径 是的 随着 mount
  • ASP.NET MVC、AngularJS、Bower 和部署站点文件夹结构

    我读过很多有关站点文件夹结构 开发和部署 的文章和问题 但仍然误解了下面的问题 我标记了当前的文件夹结构 橙色 看起来像lib or vendor文件夹 我想在其中存储独立组件 Blue 文件夹包含我自己的 相对于当前项目 应用程序 的文件
  • 如何以编程方式连接 Swift / MacOS 中的插座和操作

    我有一个简单的例子 我通过按住 Ctrl 键并将其拖动到控制器类来连接左按钮 1 和标签 1 如何以编程方式对右键 2 label2 执行相同操作 无需 Ctrl 拖动 这是我的代码 class ViewController NSViewC
  • 使用 select2.js 选择文本的不同显示值

    尝试使用以下命令实现自定义选择下拉列表选择2插件是否可以让所选值仅显示实际选项 值 而不是文本 因此如果我选择 澳大利亚元 则所选文本应仅显示 澳元 我的标记看起来像这样
  • 开发适用于 Windows Embedded Compact 2013 的应用程序

    今天我偶然发现了CE 2013 应用程序生成器在微软的下载中心 根据描述 有了这个包我应该能够develop apps that target Windows Embedded Compact 2013使用 Visual Studio 20
  • 如何在 R 中以最少的努力为数据集中的所有变量创建直方图?

    探索新的数据集 可视化许多 所有 变量的最简单 最快的方法是什么 理想情况下 输出显示彼此相邻的直方图 具有最小的混乱和最多的信息 这个问题的关键是处理大型和不同数据集的灵活性和稳定性 我使用 RStudio 通常处理大量且混乱的调查数据
  • 设置用户控件的父级可防止其透明

    我创建了一个简单的用户控件 它是用类似的东西手动创建的 MyUserControl ctrl new MyUserControl 该控件的设计目的是背景颜色 颜色 透明这工作正常 直到我设置Parent控件到窗体的颜色 此时它会变成窗体的颜
  • 安圭拉 _isEnabled 和 isEnabled 有什么区别?

    我一直在关注 GUI 扩展并注意到示例使用其中之一 isEnabled or isEnabled 不带下划线 两者似乎都可以扩展或可能取代现有功能 已启用 例如 PowerTools 基类 似乎没有 扩展 现有功能 具有 PowerTool