Лучший способ обработки JavaScript в рамках пользовательских элементов управления? - PullRequest
6 голосов
/ 28 июля 2010

В ASP.Net у меня есть несколько пользовательских элементов управления, которые я сделал.Я использовал jQuery, где это также помогло.Ну, одна проблема, с которой я столкнулся (с очевидными, но "плохими" обходными путями), заключается в том, что для каждого пользовательского элемента управления мне нужно выполнить некоторый код из pageLoad ($(document).ready не будет работать с панелями обновления).

Ну, так что теперь моя проблема.Мне нужно иметь два пользовательских элемента управления, прикрепленных к событию pageLoad.

Каков наилучший способ сделать это?

Я не могу просто сделать

old_pageLoad=pageLoad
pageLoad=function(){... old_pageLoad();}

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

единственный метод, который я придумал, - это что-то вроде этого, которое кажется супер хакерским:

old_pageLoad_<%= MyStaticClass.GetUniqueID() %>=pageLoad;
pageLoad=function(){... old_pageLoad_<%= MyStaticClass.GetUniqueID() %>();}

Существуют ли более эффективные способы обработки конфликтов функций, подобных этой?

Я также видел эту статью MSDN , но то, что она предлагает, кажется мне хужечем то, что я сейчас делаю.

Ответы [ 2 ]

1 голос
/ 28 июля 2010

Используйте RegisterStartupScript метод ScriptManager.Вы передаете ссылку на свой элемент управления при регистрации сценария, и это обеспечивает запуск сценария инициализации при каждом обновлении элемента управления (либо при загрузке первой страницы, либо при обновлении UpdatePanel).

0 голосов
/ 02 августа 2010

Другим способом было бы добавить обработчик, который вызывает метод Javascript, когда заканчивается асинхронная обратная передача.Я делал это несколько раз, чтобы заново инициализировать диалоги jQuery.Например,

$().ready(function() {
  myInitMethod();
  Sys.WebForms.PageRequestManager.getInstance().add_endRequest(myInitMethod);
});

function myInitMethod() }
  // Init code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...