Как я могу подключить событие для запуска после того, как методы моего выбора закончили выполнение в JavaScript? - PullRequest
0 голосов
/ 01 марта 2012

Трудно обобщить в одном вопросе, но вот детали:

У меня есть проект ASP.NET MVC 3 (многие из них на самом деле).

Моя стандартная практика заключается в том, чтобы для каждого представления был метод Init(), который запускается, когда документ готов. Здесь я помещаю весь свой код пользовательского интерфейса, например кнопки рендеринга и аккордеоны и т. Д.

Я использую хитрость, чтобы скрыть неформатированные html-элементы, установив для тега html значение display: none, и после завершения Init() я могу отобразить все.

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

Я хотел бы прикрепить обратный вызов в одном месте, который срабатывает после завершения всех моих возможных вызовов Init().

Я пытался использовать пользовательские события, но тогда мне пришлось бы запускать их в конце каждого метода Init, и это не очень эффективно.

Заранее спасибо за любую помощь.

запрашиваемый код:

Страница макета

<script>
     $("html").addClass('init') // init has display: none
     $(function() {
          InitLayout() // Basic stuff for every page like menu, buttons, etc

          $("html").removeClass('init'); // show all content
     });
</script>

Просмотр страницы

<script>
    $(function() {
         ViewInit() // Init all custom ui elements on page: tabs, accordions, etc
    });
</script>

Проблема в том, что removeClass будет происходить до того, как сработает Init каждой страницы. Я пытаюсь найти способ избежать вызова removeClass внизу каждого Init метода. Есть ли способ присоединить обратный вызов программно, чтобы избежать повторения кода. Моя главная цель здесь - реализовать скрытие нестандартного содержимого до тех пор, пока все не будет завершено глобально, поэтому мне не нужно беспокоиться об этом в каждом представлении.

1 Ответ

0 голосов
/ 01 марта 2012

Вы можете попытаться зарегистрировать вхождение процедуры init в глобальную переменную (массив).Это должно быть сделано за пределами document.ready () или JQuery-эквивалента.Таким образом, в тегах <script>.

Когда ваши функции Init будут завершены, внутри обработчика события document.ready () или его эквивалента JQuery отмените регистрацию вхождения.

Во время отмены регистрации проверьтеесли остались какие-либо события, если нет, измените свой стиль HTML.

В этом случае может сработать разрыв между синтаксическим анализом скрипта и фактической загрузкой DOM.

...