2012-11-26 2 views
0

본질적으로 단 하나의 웹 페이지 인 Ajax를 사용하여 부분 뷰를 사용하여 페이지간에 이동합니다. 문제는 웹 페이지의 한 섹션이 다중 페이지 양식 (사실 6 페이지)이라는 것입니다. 예상했을지 모르겠지만, 이것은 꽤 큰 형태입니다. window.onbeforeunload 이벤트를 사용하여 우연히 창 밖으로 나가는 것을 방지하고 싶습니다. (이것이 실제로 작동하지 않는다는 사실을 무시하십시오. 사용자가 새로 고침을하면 현재 디자인에서 발생할 수있는 유일한 시간이므로).Ajax 로딩 부분 뷰 (외부 자바 스크립트 참조)

이제 페이지에서 이동하면 window.onbeforeunload 처리기가 여전히 원하는대로 표시되지 않습니다.

우리는 웹 사이트의 정적 부분에서 작동하는 이벤트를 "찢어 버리는"방법이 필요합니다. 우리는 어떻게이 일을 시작하게 될까요?

+0

null로 설정 했습니까? 'window.onbeforeunload = null' – ahren

+0

또는 정의되지 않음, 예. 그러나 우리는이 문장을 (다른 모든 js 파일이나 하나의 파일에) 어디에두고 다른 개발자가 윈도우에 이벤트를 추가 할 것인가에 대해 설명합니다. 어떻게 모두 정리되었는지 확인합니까? 거기에 대한 일종의 프레임 워크가 있나요? –

답변

0

우리는이 문제에 대한 아주 멋진 해결책을 생각해 내었습니다. 우리의 부분 뷰에서 참조되는 모든 스크립트는 그래서 클래스에 싸여있다 :

우리 layout.cshtml에서
Namespace.ClassName = function(){ 
    function init(){ 
      ... 
    } 

    //Other Private methods go here. 

    init();// A call to the init function 
} 

우리는 모든 스크립트 파일에 대한 참조를 포함, 우리의 주요 스크립트 파일에 우리는 매핑 사전을 가지고 해시 태그를 사용하여 포인터를 함수화합니다 (우리는 해시 태그를 사용하여 아약스를 사용하여 사이트를 탐색합니다).

var dict = {}; 
dict["HashTag1"] = Namespace.ClassName;//A function pointer pointing to the script 
             //for this URL. Doesn't execute anything 
dict["HashTag2"] = Namespace.ClassName1; 

하나의 결함은 각 부분에 관련된 하나의 스크립트 파일 만있을 수 있다는 것입니다.

부분이 렌더링되는 컨테이너의 내용을 업데이트하는 함수에서 현재 스크립트 파일을 추적하고 두 개의 인수 데이터와 사용할 스크립트의 클래스 이름을 허용합니다. 그걸 말하지 호출 기능은 사전에서 스크립트의 이름을 가져옵니다 : 모든 스크립트가 부분보기 내부에 위의 지정된 형식이 될 필요가 참조 할 수로

var currentJSClass; 
function UpdateContent(data,jsClass){ 
    if (currentJSClass&& currentJSClass.dispose) { 
      currentJSClass.dispose(); //If the current class has a a dispose 
            //method, call it. 
    } 
    $("#partialContent").html(data); 
    if (jsClass) { 
      currentJSClass= new class();//Run the function we have 
             //pointed to 
    } 
    else { 
     currentJSClass= jsClass; //set the current class 
    } 
} 

여기에는 몇 가지 제한 사항이 있습니다, 그들은 처분이 있어야합니다 메서드를 사용하려면이 메서드를 사용하는 것이 좋지만 실제 부분 이외의 이벤트를 처리하고 구성하는 데는 좋은 프레임 워크를 사용한다고 생각합니다.