在 CSOM/JSOM 中成功使用 SP.SOD.executeOrDelayUntilEventNotified(func, eventName)?

Successful use of SP.SOD.executeOrDelayUntilEventNotified(func, eventName) in CSOM/JSOM?

我在我的 JSOM (https://msdn.microsoft.com/en-us/library/ff411788(v=office.14).aspx). Has anybody out there used SP.SOD.executeOrDelayUntilEventNotified(func, eventName) (https://msdn.microsoft.com/en-us/library/ff410354(v=office.14).aspx) 中成功地使用了 SP.SOD.executeOrDelayUntilScriptLoaded(func, depScriptFileName) 吗?对于 eventName 是否像 "click" 一样简单?我在网上搜索过,但没有找到任何有用的东西。感谢任何反馈。

这些函数之间的主要区别在于,在第一种情况下,指定了来自客户端库的文件名,例如 sp.js(参数 depScriptFileName)。在后一种情况下,应指定事件名称,例如 "sp.scriptloaded-sp.js" (参数 eventName)

这是来自 SharePoint 客户端库 init.jsSP.SOD.executeOrDelayUntilEventNotified(func, eventName) 的声明:

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 Title 属性:

的简单示例
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 库。