将 JavaScript 嵌入 SharePoint

可以使用命名空间防止自己的 JavaScript 自定义项与 SharePoint JavaScript 或其他开发人员部署的 JavaScript 自定义项冲突。

OfficeDev/PnP 示例和解决方案经常包含 JavaScript 代码。 为了使该技术易于理解,这些示例通常简单易懂且将 JavaScript 代码嵌入 SharePoint 时不会使用命名空间。 请务必确保遵循本文中列出的基本步骤将 PnP 示例引入解决方案。

为什么使用命名空间非常重要

JavaScript 是一种弱类型的语言。 如果你定义了一个变量或函数,而在现有的上下文中已存在与其名称相同的变量或函数,则新的值或实现将替换现有的值或实现。 因此,将 JavaScript 代码嵌入 SharePoint 时,可很容易地替代标准的 SharePoint JavaScript 代码或其他开发人员部署的自定义项。 这也许会导致难以识别和调试的冲突。

为避免此问题,我们建议将自定义命名空间用于 JavaScript 代码。

如何使用命名空间

以下示例说明了一种按命名空间和类组织 JavaScript 代码的简单模式。

var MySolution = MySolution || {};

MySolution.MyClass1 = (function () {
    // private members
    var privateVar1 = 1;
    var privateVar2 = 2;
    
    function privateFunction1(){
      return "";
    }
    
    return {
        // public interface
        myFunction1: function() {
          return privateVar1;
        },
        myFunction2: function(){
          return privateVar2;
        }
    };
})();

在公共接口定义的函数可能按以下方式调用:

MySolution.MyClass1.myFunction1();

MySolution.MyClass1.myFunction2();

因为所有代码都使用自定义的 MySolution 命名空间,所以可以避免任何命名冲突。

命名空间和最少下载策略 (MDS)

随着 最少下载策略功能(#最少下载策略功能) 的启用,全局命名空间和变量在 MDS 导航上已清除。
若要保留你的命名空间,则将其声明为:

    Type.registerNamespace('MySolution');

类型命名空间特定于 SharePoint,对于通用 JavaScript 库,请使用:

if (window.hasOwnProperty('Type')) {
    Type.registerNamespace('MySolution');
} else {
    window.MySolution = window.MySolution || {};
}

命名空间、MDS 和 CSR(客户端呈现)

RegisterModuleInit 函数声明正确的 Type 命名空间。
附加 JSLink 的文件不能在 MDS 导航上重新执行,为此,可使用 AsyncDeltaManager 函数。

另请参阅: