#sharepoint #sharepoint-2010 #sharepoint-clientobject
#sharepoint #sharepoint-2010 #sharepoint-clientobject
Вопрос:
По какой-то причине модальный диалог моего SharePoint не работает должным образом. Ошибка, которую я получаю, заключается в следующем:
- В Firefox:
SP.UI.$create_DialogOptions is not a function
- В IE:
Object doesn't support this property or method
Вот мой код:
var options = SP.UI.$create_DialogOptions();
options.width = 525;
options.height = 300;
options.url = '/_layouts/mywork/richtexteditor.aspx';
options.dialogReturnValueCallback = Function.createDelegate(null, function (result, value)
{
alert(result value);
});
SP.UI.ModalDialog.showModalDialog(options);
Интересно, что когда я проверяю SP.UI в Firebug, я не вижу всех методов и свойств.
ПРИМЕЧАНИЕ: Я использую стандартную веб-часть (не визуальную), а не страницу приложения.
Комментарии:
1. Соответствующий SP «модуль» загружен неправильно. Скорее всего, это бессмысленно связано с динамической загрузкой JS (и не загружается во время вызова). Смотрите ilovesharepoint.com/2010/08 / … по сути.
2. Единственная причина, по которой нам нужно загружать его динамически, заключается в том, что нам нужно показывать всплывающее окно при событии щелчка в ячейке нашей сетки
3. @Ruby Нет, нет, я имею в виду, что JavaScript, который предоставляет
SP.UI.$create_DialogOptions
, еще не загружен. SP2010 создал новый беспорядок с этим «динамическим» материалом JS.4. Убедитесь, что создание диалога также происходит после любого события SP DOM «ready» — у вас есть ссылка на скрипт OnDemand для «sp.js «в макете нет?
5. P.S. Просто используйте:
var options = {...}
, хотя это просто отложит ошибку доshowModalDialog
строки. Я не уверен, почему$create_DialogOptions
когда-либо так широко предлагалось…
Ответ №1:
Проблема в том, что требуемая «Библиотека» SharePoint JavaScript не была загружена. (В SharePoint 2010 JS царит изрядный беспорядок, а пространства имен / etc. Приходят отовсюду — вопрос еще более усложняется с новой загрузкой «по требованию»).
Библиотека, которую необходимо загрузить для использования модального диалогового интерфейса SP2010 (включая $create_DialogOptions
и showModalDialog
), является «sp.js «.
Для обеспечения «sp.js «загружено:
ExecuteOrDelayUntilScriptLoaded(function () {
// do modal dialog stuff in here (or in another function called from here, etc.)
}, "sp.js")
Функция обратного вызова вызывается только после «sp.js «(включая SP.UI.ModalDialog
материал) гарантированно будет загружен (и он может никогда не вызываться при возникновении ошибки загрузки).
Это также, вероятно, можно было бы решить с помощью <ScriptLink>
to sp.js
с OnDemand
указанным, но я не могу этого гарантировать: (Я думаю, что, возможно, были проблемы с этим подходом, но я не могу вспомнить, почему он не используется в проекте, который я только что просмотрел.)
<SharePoint:ScriptLink runat="server" Name="sp.js" OnDemand="true" Localizable="false" />
Смотрите SPSOD для получения более подробной информации.
Удачного кодирования.
Комментарии:
1. Тогда что-то определенно не так :(. С веб-частью проблем нет, пока загружены правильные библиотеки JS.
2. @Ruby Я вижу, что этот ответ был принят — вы в конечном итоге устранили проблему, и если да (особенно если она отличалась от приведенной выше), то каким образом? 🙂
3. Я не хочу, чтобы проблема с кэшированием в браузере sat, потому что это не имеет смысла. Но я все равно это скажу!
4. @Ruby Я могу в это поверить. Рад, что это «исправлено».
Ответ №2:
Для меня это работало так: ExecuteOrDelayUntilScriptLoaded(function () {}, "sp.js")
и:
<SharePoint:ScriptLink ID="ScriptLink1" runat="server" Name="sp.js"
OnDemand="false" Localizable="false" LoadAfterUI="true"/>
Ответ №3:
Обнаружено, что оба подхода Adela и user166390 терпят неудачу в старых версиях 7-8. Кажется, что страница не полностью проанализирована и ее пытались изменить с помощью iframe диалога, и это плохо для этих файлов. В моем случае — мне нужно автоматически всплывающее диалоговое окно на странице приложения — я исправил это с помощью next
<asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">
<SharePoint:SPPageManager ID="SPPageManager1" runat="server" />
<script type="text/javascript">
var ShowDialog = function () {
var options = {
url: '/_login/default.aspx,
title: 'Title, Description, and Icon',
width: 640,
height: 400,
dialogReturnValueCallback: function(dialogResult, returnValue) {
window.location.replace(returnValue);
}
};
SP.UI.ModalDialog.showModalDialog(options);
};
ExecuteOrDelayUntilScriptLoaded(ShowDialog, "sp.ui.dialog.js");
</script>
</asp:Content>
Эта маленькая вещь
<SharePoint:SPPageManager ID="SPPageManager1" runat="server" />
регистрирует все SP javascripts.
Подход был найден на форумах MSDN.
Ответ №4:
Вы можете устранить эту проблему, используя универсальный объект для option вместо класса DialogOptions. это означает, что вы должны написать параметр, подобный этому:
//Using a generic object.
var options = {
title: "My Dialog Title",
width: 400,
height: 600,
url: "/_layouts/DialogPage.aspx" };
для получения дополнительной информации об его использовании посетите:
http://msdn.microsoft.com/en-us/library/ff410058(v=office.14).aspx
и посмотрите пример.