Внедрение JavaScript в SharePoint
Пространства имен можно использовать, чтобы избежать конфликтов между настройками JavaScript и стандартными настройками SharePoint JavaScript или JavaScript, развернутыми другими разработчиками.
Примеры и решения OfficeDev/PnP часто включают код JavaScript. Чтобы упростить понимание методов, эти примеры обычно просты и не используют пространства имен при внедрении кода JavaScript в SharePoint. При включении примеров PnP в решения важно выполнить простые действия, описанные в этой статье.
Почему важно использовать пространства имен
JavaScript — это слабо типизированный язык. Если вы определяете переменную или функцию, а переменная или функция с тем же именем уже существует в текущем контексте, новое значение или реализация заменит существующее. В результате при внедрении кода JavaScript в SharePoint можно легко переопределить стандартный код JavaScript sharePoint или настройки, развернутые другими разработчиками. Это может привести к возникновению конфликтов, которые может быть трудно идентифицировать и отлаживать.
Чтобы избежать этого, рекомендуется использовать пользовательские пространства имен для кода 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');
Пространство имен Type предназначено только для SharePoint, для использования универсальной библиотеки JavaScript:
if (window.hasOwnProperty('Type')) {
Type.registerNamespace('MySolution');
} else {
window.MySolution = window.MySolution || {};
}
Пространства имен, MDS и CSR (отрисовка на стороне клиента)
Функция RegisterModuleInit
объявляет правильное Type
пространство имен.
Файлы, присоединенные с помощью JSLink, не выполняются повторно при навигации MDS. Для этого используйте функции AsyncDeltaManager.