Я довольно часто использовал SP.SOD.executeOrDelayUntilScriptLoaded (func, depScriptFileName) в своем JSOM (https://msdn.microsoft.com/en-us/library/ff411788(v=office.14).aspx). Кто-нибудь там использовал SP.SOD.executeOrDelayUntilEventNotified (func, eventName) (https://msdn.microsoft.com/en-us/library/ff410354(v=office.14).aspx) успешно? Для eventName это как-то просто, как «щелчок»? Я искал в Интернете, но не нашел ничего полезного. Любая обратная связь оценена.Успешное использование SP.SOD.executeOrDelayUntilEventNotified (func, eventName) в CSOM/JSOM?
ответ
В основном разница между этими функциями, которая в первом случае указывается имя файла из клиентской библиотеки, например sp.js
(параметр depScriptFileName
). В последнем случае следует указать название события, например "sp.scriptloaded-sp.js"
(параметр eventName
)
Вот декларация SP.SOD.executeOrDelayUntilEventNotified(func, eventName)
из библиотеки клиента SharePoint init.js
:
function ExecuteOrDelayUntilScriptLoaded(func, depScriptFileName) {
depScriptFileName = depScriptFileName.toLowerCase();
var eventName = "sp.scriptloaded-" + depScriptFileName;
return ExecuteOrDelayUntilEventNotified(func, eventName);
}
О названиях событий
Список имен событий хранится в глобальной переменной с именем g_ExecuteOrWaitJobs
. Для каждого файла библиотеки SharePoint используется предопределенное имя события, например, для файла sp.clienttemplates.js
соответствующего имя события sp.scriptloaded-clienttemplates.js
Позволяет продемонстрировать, как использовать оба SP.SOD.executeOrDelayUntilScriptLoaded(func, depScriptFileName)
и SP.SOD.executeOrDelayUntilEventNotified(func, eventName)
функции.
Для того, что цели давайте познакомимся простой пример, который печатает SP.Web
Название свойства:
function printWebInfo(){
var ctx = SP.ClientContext.get_current();
var web = ctx.get_web();
ctx.load(web,'Title');
ctx.executeQueryAsync(
function(){
console.log(web.get_title());
},
function(sender,args){
console.log(args.get_message());
});
}
В следующем примере
ExecuteOrDelayUntilScriptLoaded(printWebInfo, "sp.js");
printWebInfo
функция будет вызываться один раз Клиентская библиотека SharePoint sp.js
загружена.
Тот же самый пример, который использует SP.SOD.executeOrDelayUntilEventNotified(func, eventName)
будет выглядеть следующим образом:
var eventName = "sp.scriptloaded-sp.js";
ExecuteOrDelayUntilEventNotified(printWebInfo,eventName);
где "sp.scriptloaded-sp.js"
название события используется для определения того, загружен ли sp.js
библиотека или нет.
Спасибо Вадиму за сообщение, я смог изучить все события в g_ExecuteOrWaitJobs и посмотреть все события и хороший пример использования – Matt
Он используется для обнаружения события SharePoint («_spEventWebPartAdderReady») в ответ на этот вопрос: http://stackoverflow.com/questions/22318388/sp-ribbon-webpartcomponent-getwebpartadder-returns-undefined – Thriggle
Спасибо Thriggle, хороший ответ – Matt