将 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 函数。