2012-05-17 4 views
2

내 index.html을은 다음과 같습니다 : 해당 파일의jQuery Mobile "mobileinit"이벤트가 두 번 실행됩니까?

<!DOCTYPE html> 
<html class="ui-mobile-rendering"> 
<head> 
    <title></title> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no;" /> 
    <meta charset="utf-8"> 
    <link rel="stylesheet" href="css/jquery.mobile-1.1.0.min.css" /> 
    <list rel="stylesheet" href="css/app.css" /> 
    <script src="js/jquery.min.js"></script> 
    <script type="text/javascript" src="js/underscore.js"></script> 
    <script type="text/javascript" src="js/backbone.js"></script> 
    <script type="text/javascript" src="js/views/attachmentlist.js"></script> 
    <script type="text/javascript" src="js/models/attachmentmodel.js"></script> 
    <script type="text/javascript" src="js/app.js"></script> 
    <script src="js/jquery.mobile-1.1.0.min.js"></script> 
    <script type="text/javascript" charset="utf-8" src="js/cordova-1.7.0rc1.js"></script> 
    </head> 

    <body></body> 

</html> 

물론 아무도 jQuery를 모바일에 대한 참조가 없습니다 만 지수는 않습니다.

내 app.js 파일은 다음과 같습니다 :

$(document).live("mobileinit", function() { 
    console.log('in Mobile Init'); 
    $.mobile.ajaxEnabled = false; 
    $.mobile.linkBindingEnabled = false; 
    $.mobile.hashListeningEnabled = false; 
    $.mobile.pushStateEnabled = false; 

    // Remove page from DOM when it's being replaced 
    $('div[data-role="page"]').live('pagehide', function (event, ui) { 
     $(event.currentTarget).remove(); 
    }); 
}); 

뭔가가 두 번 발사 "모바일 초기화"를 일으키는 것입니다. 나는 그것이 무엇인지 또는 그것이 정말로 문제 일지 모르지만 그것이 일어나서는 안되는 어떤 것으로 느낀다.
이 문제를 해결할 수있는 방법이 있습니까?

편집
사실은 그냥 몸으로 똑바로 간단한 "스크립트"태그를 넣고 거기에 CONSOLE.LOG을 할 경우, 그것은 .... 두번의 sooo를 .... 뭔가를 실행하는 것으로 나타났습니다 코드로 인해 내 전체 페이지가 두 번 초기화됩니다.
실제로 실제로 전체 설치 프로그램이 두 번로드되는 것처럼 보입니다. 나는 앱이 처음 로딩 될 때 일어나는 일들의 사슬을 따라 console.log를 배치 할 것이고, 모든 것이 두 번 일어나고있다.

+0

이 가능한 솔루션을 체크 아웃 : 1 http://stackoverflow.com/questions/9836112/jquerymobile-script-runs-twice-on-each-pageload 2에 http : // 유래합니다. co.kr/questions/7024388/jquery-mobile-duplicated-events –

+0

불행히도, 이들 중 누구도 일하지 않았습니다. 내 스크립트는 모두 이고 dom-data-cache 속성을 추가하고 내 캐시를 지 웠습니다 (심지어 페이지를로드 한 적이없는 전혀 다른 브라우저에서 시도해 보았습니다). 그리고 여전히 이벤트를 두 번 실행합니다. –

답변

1

한 번 비슷한 점을 발견했습니다. 그것은 가치가 무엇인지를 들어,이 I 그것을 해결 방법은 다음과 같습니다 측면에

$(document).live("mobileinit", function() { 
    console.log('in Mobile Init'); 

    $.extend( $.mobile , { 
     autoInitializePage: false, 
     loadingMessage: false 
    }); 

    $.mobile.ajaxEnabled = false; 
    $.mobile.linkBindingEnabled = false; 
    $.mobile.hashListeningEnabled = false; 
    $.mobile.pushStateEnabled = false; 

    // Remove page from DOM when it's being replaced 
    $('div[data-role="page"]').live('pagehide', function (event, ui) { 
     $(event.currentTarget).remove(); 
    }); 
}); 

: 나는 당신의 코드를 같은 시도에 적응해야한다면

$(document).bind("mobileinit", function() { 
    $.extend( $.mobile , { 
    autoInitializePage: false, 
    loadingMessage: false 
    }); 
}); 

참고로 jQuery의 .live() 함수를 사용하면 안됩니다. 자신의 docs에 따르면

jQuery를 1.7,의 이름으로 .live() 방법은 사용되지 않습니다. 이벤트 처리기를 연결하려면 .on()을 사용하십시오. 이전 버전의 jQuery 사용자는 .live()보다 우선하여 .delegate()을 사용해야합니다.

+0

실제로 저를 위해 문제를 해결합니다 .... 당신은 왜 그 이유를 설명 할 수 있습니까? 나는 꽤 새로운 Javascript 프로그래머이며 실제로 코드에 추가 된 기능이 실제로 무엇인지 실제 실마리가 없으며 사용하는 코드를 이해하지 못한다. –

+0

나는이 코드가 다른 코드를 로딩하는 것을 막음을 깨달았다. : - \ –

1

아마도이 대답은 듣고 싶지는 않지만 실제로는 내가 제공 할 수있는 가장 유용한 조언이라고 생각합니다.

가능한 경우 Jquery mobile을 제거하는 것이 좋습니다. 나는 최근 Jquery 모바일이 이런 일을 할 때 문제가 발생한 팀에서 일했다. 페이지를로드 할 때 발생하는 비동기 코드가있는 경우 Jquery 모바일의 이벤트를 자신의 것과 동기화되도록 만드는 것은 거의 불가능합니다.

모바일 사이트에 대한 자연스럽고 자연스러운 느낌이 필요하면 Spine 및 RequireJS를 사용해 보는 것이 좋습니다. 디자인 제약 조건에 따라 Spine Mobile도 사용할 수 있으며 작업을 수행 할 것입니다.

Jquery 모바일은 기본적으로 브라우저가 사이트를 단일 페이지 응용 프로그램이라고 생각하도록 속이며, 이로 인해 매우 어수선하게 느껴집니다. 백업하고 올바른 작업을 수행 할 수있는 시간이 있고 실제로 단일 페이지 응용 프로그램을 만드는 경우보다 깨끗하고 안정적인 코드 및 유용한 응용 프로그램을 만들게됩니다.

Ditch Jquery Mobile. 개발 팀과 사용자가 감사 할 것입니다.


EDIT : 2015이므로 EDIT : Spine과 Require를 더 이상 사용하지 마십시오. Webpack을 시도하고 반응하십시오! 하지만 확실히 Jquery 모바일을 사용하지 마십시오.

+2

이 질문에 대한 답변을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. – Blackwood

+0

나는 당신이 @Blackwood라고 말하는 것을 이해하고 일반적으로 그렇게 하겠지만,이 질문에 대한 진정한 대답이되어야합니다. Ditching Jquery 모바일은 분명히 자신의 문제를 해결할 것이고 정직하게 사용할 수있는 최상의 솔루션입니다. –

관련 문제