Порядок делегирования SharePoint DelegateControl - PullRequest
3 голосов
/ 28 февраля 2009

У меня есть две функции SharePoint, каждая из которых реализована одинаково (см. Ниже), которые добавляют элементы управления к элементу управления делегата в заголовке моих страниц. Один из элементов управления зависит от другого (один - библиотека jQuery, а другой - от jQuery), однако при визуализации элементов управления порядок элементов управления неверен. Как указать порядок отображения этих элементов управления?

Элемент управления (оба идентичны, за исключением того, что они ссылаются на другой файл .js):

<%@ Control ClassName="MyScriptControl" %>
<script type="text/javascript" src="/_layouts/MyScript.js"></script>

feature.xml:

<?xml version="1.0" encoding="utf-8" ?> 
<Feature Id="AA9D59AC-D53E-4338-9B52-CD39F2A8C31A" 
    ActivateOnDefault="true" 
    Title="My Feature" 
    Description="Does something." 
    Scope="Site" Version="1.0.0.0" 
    Hidden="FALSE" 
    DefaultResourceFile="core" 
    xmlns="http://schemas.microsoft.com/sharepoint/">
    <ElementManifests>
        <ElementManifest Location="MyFeature\Elements.xml" /> 
    </ElementManifests>
</Feature>

Elements.xml:

<?xml version="1.0" encoding="utf-8" ?> 
<Elements xmlns="http://schemas.microsoft.com/sharepoint/" 
    Id="24A4BB9A-9636-4a73-B3A5-35661DE19902">
    <Control Id="AdditionalPageHead" 
        ControlSrc="~/_controltemplates/MyControl.ascx" /> 
</Elements>

Вывод на странице (jQuery развернут перед DependsOnjQuery):

<script type="text/javascript" src="/_layouts/DependsOnjQuery.js"></script>
<script type="text/javascript" src="/_layouts/jQuery.min.js"></script>

Я хочу, чтобы MyControl1.js отображался до MyControl2.js.

Ответы [ 3 ]

2 голосов
/ 28 февраля 2009

Мне удалось заставить это работать, добавив второй DelegateControl в заголовок моей главной страницы и добавив jQuery к этому делегату. Таким образом, я могу быть уверен, что jQuery всегда будет загружаться раньше всего, без необходимости писать логику для задержки загрузки моих зависимых библиотек.

<SharePoint:DelegateControl runat="server" ControlId="jQueryDelegate" AllowMultipleControls="true"/>
<SharePoint:DelegateControl runat="server" ControlId="AdditionalPageHead" AllowMultipleControls="true"/>
1 голос
/ 28 февраля 2009

Мне кажется, что атрибут Sequence можно использовать для управления порядком рендеринга этих парней. Дайте вашему элементу управления jQuery последовательность 50, а вашему элементу управления DependsOnjQuery - последовательность 100, и все будет хорошо.

Для получения дополнительной информации см. Документацию Delegate Control на MSDN .

0 голосов
/ 28 февраля 2009

вы пытались установить атрибут DEFER = "DEFER" в скрипте.

, который сообщает пользовательскому агенту, что скрипт должен дождаться загрузки страницы и отрисовки, прежде чем загружать скрипт.

В противном случае вы можете взломать его, установив переменную для одного скрипта, которая устанавливается в true при загрузке скрипта. В другой вы поместили логику, которая тестировала (думаю цикл и метод тайм-аута), был ли скрипт загружен, а затем вызывает вашу логику, когда оба скрипта загружены.

не очень хорошо, но вам нужна какая-то логика для управления выполнением, а не просто запускать встроенные методы в вашем скрипте.

Натану: последовательности в делегатах используются для определения , какой из делегатов управляет для загрузки. Это не должно иметь ничего общего с рассматриваемой проблемой. Насколько я понимаю, JS-файлы просто устанавливают значение в сценарии, который, как оказалось, является делегатом.

...