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

时间:2016-04-06 17:27:15

标签: c# sharepoint sharepoint-2010 csom sharepoint-jsom

我在JSOM(https://msdn.microsoft.com/en-us/library/ff411788(v=office.14).aspx)中使用了SP.SOD.executeOrDelayUntilScriptLoaded(func,depScriptFileName)。有没有人成功使用SP.SOD.executeOrDelayUntilEventNotified(func,eventName)(https://msdn.microsoft.com/en-us/library/ff410354(v=office.14).aspx)?对于eventName,它是否像“点击”一样简单?我在网上搜索过但没有找到任何有用的东西。任何反馈意见。

1 个答案:

答案 0 :(得分:2)

基本上是指定了第一种情况下客户端库中文件名称的那些函数之间的区别,例如sp.js(参数depScriptFileName)。在后一种情况下,应指定事件名称,例如"sp.scriptloaded-sp.js"(参数eventName

以下是来自SharePoint客户端库init.js的{​​{3}}声明:

function ExecuteOrDelayUntilScriptLoaded(func, depScriptFileName) {
    depScriptFileName = depScriptFileName.toLowerCase();
    var eventName = "sp.scriptloaded-" + depScriptFileName;

    return ExecuteOrDelayUntilEventNotified(func, eventName);
}

关于活动名称

事件名称列表存储在名为g_ExecuteOrWaitJobs的全局变量中。对于每个SharePoint Client库文件使用预定义的事件名称,例如对于文件sp.clienttemplates.js,相应的事件名称为sp.scriptloaded-clienttemplates.js

让我们演示如何使用SP.SOD.executeOrDelayUntilEventNotified(func, eventName)SP.SOD.executeOrDelayUntilScriptLoaded(func, depScriptFileName)函数。

出于这个目的,让我们介绍一个打印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");

{}支持SharePoint客户端库printWebInfo后,将调用<sp.js函数。

使用SP.SOD.executeOrDelayUntilEventNotified(func, eventName)的相同示例如下所示:

var eventName = "sp.scriptloaded-sp.js";
ExecuteOrDelayUntilEventNotified(printWebInfo,eventName);

其中"sp.scriptloaded-sp.js"事件名称用于确定是否加载了sp.js库。