1

У меня есть частичный вид, созданный для повторного использования. Это частичное представление имеет выпадающий список, в котором используется Chosen plugin. Поэтому на частичном представлении я ссылаюсь на выбранный файл js/css вместе с некоторым кодом javascript для готовности документа.MVC Partial View Javascript

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

Мое беспокойство заключается в том, что дубликаты js будут загружаться каждый раз, когда они нажимают кнопку. Это, пожалуй, причина, по которой люди не рекомендуют напрямую добавлять js в Partial View. В моем случае он должен быть там для плагина и манипуляции внутри самого Partial View. Есть ли хороший способ проверить загруженные js и предотвратить его повторную загрузку в последующем событии клика?

+1

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

+0

@VsevolodGoloviznin: Это лучший ответ, который получит OP. Вы должны просто продолжить и фактически добавить его в качестве ответа. –

+0

@NKD: Чтобы реализовать то, что предлагает Всеволод, можно найти в библиотеках, таких как Require.js или функциональность «load» Modernizr. –

ответ

0

Файлы JavaScript и CSS для избранных должны быть включены на страницу при первой загрузке страницы. Когда пользователь нажимает кнопку, сделайте вызов Ajax для включения частичного. В обратном вызове успеха для запроса AJAX инициализируйте выбранный код плагина для выпадающих списков, которые были просто введены на страницу.

Правильно, что дубликаты JS и CSS-файлов будут загружены, что определенно вам не нужно.

$.ajax(...) 
    .done(function(data) { 
     $("#foo") 
      .html(data) 
      .find("select") 
      .each(function() { 
       $(this).chosen({...}); 
      }); 
    }); 
+0

спасибо за предложение. У меня также есть код документа на частичном чтобы управлять выбранным выпадающим списком.Если я это сделаю, у меня получится длинная функция обратного вызова (код, введенный после выбранной инициализации). – NKD

+0

Вам не нужно вводить код после функции обратного вызова. Этот код должен быть запущен _а часть функции обратного вызова. –

+0

Я буквально ссылался на код, введенный сразу после выбранной строки инициализации в функции обратного вызова. – NKD

0

Продление комментария с помощью ответа.

Вы можете оставить несколько файлов css, я не думаю, что это навредит. Что касается JS файлов, сначала вы должны создать файл обертку

wrapper.js

$(function() { 
     if (!$().chosen) { //we do this only if chosen is not present 
     var script = document.createElement('script'); 
     script.type = 'text/javascript'; 
     script.src = 'url to yor chosen library'; 

     $("body").append(script); 
     }  
}); 

И тогда на ваш взгляд, вы не ссылается на эту wrapper.js файл вместо вашей chosen путь библиотеки ,

Смежные вопросы