Я разрабатываю приложение с помощью Asp.net mvc и jQuery. Я хотел бы использовать то же соглашение о присвоении имен (классы и идентификаторы) для элементов HTML в различных взглядах.
В случае, если, когда я хочу загрузить частичное представление асинхронно, $ (документ) .ready () часть кода в основном представлении теряет свою полноценность, потому что ни один из тегов HTML частичного представления и именования CSS не распознан jQuery. Я, конечно, не хочу писать тот же код для каждого представления. Что такое th ebest способ решить эту проблему?
Для этого можно использовать .live ()
, например:
$(".myClass").click(function() { });
Становится следующим:
$(".myClass").live('click', function() { });
.live ()
работает по-другому. .click ()
привязывается к элементам, с которыми селектор совпал при запуске , обычно document.ready
. .live ()
работает, живя в корне DOM, ожидая всплытия событий и выполняя обработчик, если событие, которое является целью пузыря, совпадает с селектором.
Лично я просто загружаю весь контент, используя свои собственные оболочки вокруг $ .post, и инициализирую там контент по мере необходимости. Это также помогает унифицировать обработку ошибок, ожидающих уведомлений и т. Д.
Сторонние библиотеки обычно также предоставляют способ предварительной обработки содержимого, загруженного с помощью ajax.
Частичные представления не будут вызывать document.ready, но они будут оценивать сценарии внутри тегов сценариев в заголовке, так что вы можете принудительно вызывать конкретные сценарии частичного представления.
Другой способ, который я использую, - это настраиваемые теги HTML в формах. Например.
<form custom-setup="MyCustomSetupFunc">
и мой обработчик $ .post проверит наличие этого тега и вызовет эту функцию, передав экземпляр формы. Это помогает сузить область действия скрипта при загрузке партиала (полезно, когда на одной странице могут быть загружены несколько экземпляров партиала).