我已经对此进行了彻底的研究,每个人都说我下面的代码应该加载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>
非常感谢任何帮助。
答案 0 :(得分:5)
您正在使用ExecuteOrDelayUntilScriptLoaded错误。您应该只传递函数名称,它应该如下所示:
ExecuteOrDelayUntilScriptLoaded(SetWebUserData, "sp.js");
没有()
答案 1 :(得分:1)
我能够通过使用此处的代码解决问题并让当前用户填充人员选择器: http://vbcity.com/blogs/skullcrusher/archive/2008/11/04/set-sharepoint-peoplepicker-field-mark-2.aspx
此代码不需要SP.js
我从来没有能够正确加载sp.js,但是这个解决方案解决了我的问题。
答案 2 :(得分: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
答案 3 :(得分: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();
};