1

부분적으로 재사용을 위해 생성 된 뷰가 있습니다. 이 부분보기에는 Chosen 플러그인을 사용하는 드롭 다운 목록이 있습니다. 따라서 부분보기에서 나는 문서를 준비하기 위해 자바 스크립트 코드와 함께 선택된 js/css 파일을 참조한다.MVC 부분 뷰 자바 스크립트

의도 한대로 작동합니다. 그러나 이제 버튼 클릭 이벤트에서 부분 뷰를 렌더링하는 페이지가 생겼습니다. 사용자는 원하는만큼 여러 번 클릭 할 수 있습니다.

제 걱정은 버튼을 클릭 할 때마다 중복 된 js가로드된다는 것입니다. 아마도 사람들이 Partial View에 js를 직접 추가하는 것을 권장하지 않는 이유 일 수 있습니다. 필자의 경우 Partial View 자체에서 플러그인과 조작이 필요합니다. 로드 된 js를 확인하고 후속 click 이벤트에서 다시로드하지 못하도록하는 좋은 방법이 있습니까?

+1

라이브러리의 래퍼를 만들 수 있습니다.로드 할 때 필요한 라이브러리가로드되었는지 확인합니다 (라이브러리에서 전역 변수가있을 수 있음).없는 경우 스크립트를 동적으로 삽입합니다 태그를 당신의 페이지에 그렇지 않으면 그렇지 않다. –

+0

@VsevolodGoloviznin : 이것이 OP가 얻으려고하는 최선의 대답이다. 그냥 실제로 대답으로 추가해야합니다. –

+0

@NKD : Vsevolod에서 Require.js 또는 Modernizr의 '로드'기능과 같은 라이브러리를 찾는 방법을 구현합니다. –

답변

0

Chosen의 JavaScript 및 CSS 파일은 페이지가 처음로드 될 때 페이지에 포함되어야합니다. 사용자가 버튼을 클릭하면 Ajax 호출을 만들어 부분을 포함시킵니다. AJAX 요청에 대한 성공 콜백에서 방금 삽입 된 드롭 다운 목록에 대한 Chosen 플러그인 코드를 초기화합니다.

중복 된 JS 및 CSS 파일이로드되는 것은 맞습니다. 이는 원하지 않는 것이 분명합니다.

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

제안 해 주셔서 감사합니다. 또한 부분적으로 documentready 코드가 있습니다. 페이지에서 선택한 드롭 다운을 조작 할 수 있습니다. 이렇게하면 길어진 콜백 함수 (선택한 초기화 후 코드가 삽입 됨)가됩니다. – 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); 
     }  
}); 

그리고보기에 당신은 대신 chosen 라이브러리 경로의이 wrapper.js에게 파일을 참조 할 것 .