Как управлять зависимостями JavaScript для элементов управления Ajax Extender - PullRequest
2 голосов
/ 07 сентября 2011

Обеспечивает ли база управления Ajax Extender управление зависимостями?Я создаю набор элементов управления, который использует несколько базовых сценариев, используемых поведением, и отсюда Создание элемента расширения Extender , похоже, мне придется включать мой базовый сценарий в каждый отдельный управляющий код.Таким образом, база расширителей обслуживает один и тот же сценарий [кэшированный] для каждого элемента управления или один и тот же сценарий для каждого элемента управления.

Например, я разрабатываю элементы управления, которые зависят от jQuery.Так как я разрабатываю элементы управления расширением, мне нужно будет реализовать этот метод из интерфейса, как показано ниже, обратите внимание на скрипт jquery!

protected override IEnumerable<ScriptReference> GetScriptReferences()
{
    ScriptReference reference = new ScriptReference();
    reference.Path = ResolveClientUrl("jQuery.js");
    reference.Path = ResolveClientUrl("FocusBehavior.js");
    return new ScriptReference[] { reference };
}

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

Как сделать так, чтобы элемент управления extender выводил производственные сценарии вместо сценариев отладки. Также регистрация сценария с помощью scriptmanager не подходит для меня, так как я использую мастер-страницу, для которой не требуется диспетчер сценариев.

Некоторые спецификации:

Разработано в VS2005

.NET 2.0, ASP.NET 2.0

Зависимость сценариев от Sizzle, emile.js, spine.js это базовые скрипты, необходимые для всех элементов управления

1 Ответ

0 голосов
/ 14 сентября 2011

Я считаю, что платформа ASP.NET правильно обрабатывает дубликаты ScriptReference объектов в процессе рендеринга, поскольку элементы управления ASP.NET могут существовать в нескольких экземплярах на вашей странице.

Например, на странице ASP.NET вы можете сделать:

<act:Calendar runat="server" ID="calendar1"/>
<act:Calendar runat="server" ID="calendar2"/>

оба эти элемента управления используют одни и те же сценарии, но среда не загружает их дважды.

В вашей ситуации вы, вероятно, захотите сделать что-то вроде:

protected override IEnumerable<ScriptReference> GetScriptReferences()
{
    List<ScriptReference> references = new List<ScriptReference>();

    #if DEBUG
    // Load Debug Version
    references.Add(new ScriptReference(ResolveClientUrl("~/Path_To_Your_Debug_JS.js"));     
    #else
    // Load Minified Version
    references.Add(new ScriptReference(ResolveClientUrl("~/Path_To_Your_Release_JS.js"));
    #endif

    return references;
}

Это должно позволить вам обслуживать либо версии Debug, либо Release (минимизированные) ваших файлов Javascript в зависимости от того, находится лиРежимы отладки или выпуска.

Я не уверен относительно вашего комментария о том, что вашей MasterPage не требуется ScriptManager.Я предполагаю, что у вас есть какой-то механизм, который занимается обработкой обязанностей ScriptManager, таких как вызов метода GetScriptReferences() для ваших элементов управления и обработка рендеринга этих тегов сценария.

...