Handlebars と jQuery Mobile を使用してカスタム MVC 構造を実装しています。ルーティングを手動で処理するために、2 つの jQM パラメータを無効にしました。
$.mobile.linkBindingEnabled = false;
$.mobile.hashListeningEnabled = false;
これらの 2 行は、jQuery Mobile のリンク バインディングとハッシュ リッスンを無効にします。以外のページ遷移を使用するまで、すべて正常に動作しているようですfade
。リンク バインディングを再度有効にすると、ページ トランジションは機能し始めますが、おかしなことが起こり始めます (たとえば、Handlebars がコンパイルする前に jQM が HTML からこれを引き出すため、ページのタイトルが {{page}} として表示されます)。
何か案は?
<!DOCTYPE html>
<html>
<head>
<link href="/styles/jquery.mobile.css" rel="stylesheet" >
<script src="/script/jquery.js" type="text/javascript"></script>
<script src="/script/jquery.mobile.js" type="text/javascript"></script>
<script src="/script/handlebars.js" type="text/javascript"></script>
</head>
<body>
<div id="one" data-role="page">
<div data-role="header"><h1>{{page}}</h1></div>
<div data-role="content">
<p>
{{content}}
<a href="#two" data-role="button" data-transition="slide">Two</a>
</p>
</div>
</div>
<div id="two" data-role="page">
<div data-role="header"><h1>{{page}}</h1></div>
<div data-role="content">
<p>
{{content}}
<a href="#one" data-role="button" data-transition="slide">One</a>
</p>
</div>
</div>
<script>
var count = 0;
function one() {
return({page: 'One', content: 'One is the loneliest number.'});
}
function two() {
return({page: 'Two', content: 'Two is company.'});
}
// Handle link binding and hash changes manually
$.mobile.linkBindingEnabled = false;
$.mobile.hashListeningEnabled = false;
// Router
$(window).bind('load hashchange', function() {
var hash = '#one';
if (location.hash.length > 0) {
hash = location.hash;
}
var source = $(hash).html();
var template = Handlebars.compile(source);
var html = template(window[hash.substring(1, hash.length)]());
$(hash).html(html);
$.mobile.changePage(hash);
});
</script>
</body>
</html>