1

我对此进行了非常彻底的研究,每个人都说我下面的代码应该加载 SP.js,但我无法加载它。

调试我得到:

NewForm.aspx, line 1667 character 5
SCRIPT5009: 'PeoplePicker' is undefined 

并且在查看源代码下看不到 SP.JS。

<SharePoint:ScriptLink Name="SP.js" runat="server" OnDemand="true" 
    Localizable="false" /> 
<script type="text/javascript">

ExecuteOrDelayUntilScriptLoaded(SetWebUserData(), "SP.js");

function SetWebUserData() {
    var pplPicker = new PeoplePicker();
    // Set the parent tag id of the people the picker.
    pplPicker.SetParentTagId('Main_x0020_Contact');
    pplPicker.SetLoggedInUser();
    };
</script>

非常感谢任何帮助。

4

4 回答 4

5

您使用 ExecuteOrDelayUntilScriptLoaded 错误。您应该只传递函数名称,它应该如下所示:

ExecuteOrDelayUntilScriptLoaded(SetWebUserData, "sp.js");

没有()

于 2013-05-14T07:47:30.533 回答
1

我能够通过使用此处找到的代码解决问题并让当前用户填充人员选择器:http: //vbcity.com/blogs/skullcrusher/archive/2008/11/04/set-sharepoint-peoplepicker-field-标记-2.aspx

此代码不需要 SP.js

我永远无法让 sp.js 正确加载,但这个解决方案解决了我的问题。

于 2013-05-10T16:25:56.880 回答
1

ExecuteOrDelayUntilScriptLoaded的第一个参数必须是一个函数。该函数在请求的脚本文件被加载后被调用。

<SharePoint:ScriptLink Name="SP.js" runat="server" OnDemand="true" 
    Localizable="false" /> 
<script type="text/javascript">

ExecuteOrDelayUntilScriptLoaded(SetWebUserData, "SP.js");

function SetWebUserData() {
    var pplPicker = new PeoplePicker();
    // Set the parent tag id of the people the picker.
    pplPicker.SetParentTagId('Main_x0020_Contact');
    pplPicker.SetLoggedInUser();
    };
</script>

使用 (),您可以调用一个函数。这意味着,您的错误是将函数的结果作为参数传递,而不是函数本身。

更好理解的例子:

function helloFunction() {
    return 42;
}

var myHelloFunction = helloFunction; // Function is passed
var myHelloFunctionResult = helloFunction(); // Result of your function (42) is passed
于 2014-08-22T12:59:50.547 回答
0

我知道这有点晚了,但我认为这是您正在寻找的答案。

SP.SOD.executeFunc('sp.js', 'SP.ClientContext',function(){
  var pplPicker = new PeoplePicker();
  // Set the parent tag id of the people the picker.
  pplPicker.SetParentTagId('Main_x0020_Contact');
  pplPicker.SetLoggedInUser();
};
于 2017-05-24T15:18:29.157 回答