Почему SP.js не загружается?
Я исследовал это довольно тщательно, и все говорят, что код, который я имею ниже, должен загружать 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 ответа
Вы используете ExecuteOrDelayUntilScriptLoaded неправильно. Вы должны только передать имя функции, оно должно выглядеть так:
ExecuteOrDelayUntilScriptLoaded(SetWebUserData, "sp.js");
Без ()
Мне удалось решить проблему, и средство выбора людей было заполнено текущим пользователем с помощью кода, найденного здесь: http://vbcity.com/blogs/skullcrusher/archive/2008/11/04/set-sharepoint-peoplepicker-field-mark-2.aspx
Этот код не требует SP.js
Мне никогда не удавалось загрузить sp.js должным образом, но это решение решает мою проблему.
Первый параметр 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
Я знаю, что уже немного поздно, но я думаю, что это ответ, который вы ищете.
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();
};