KnockoutJS SPA tutorialの例に触発されて、Sammy.jsを使用して、単一ページアプリケーションでいくつかの簡単な動作を呼び出そうとしています。URLハッシュを使用して、呼び出されているAPIエンドポイントを追跡します。私はこのようになりますページ履歴で終わるしようとしている:すべてのケースでSammyJSは、通常のハッシュと同じスラッシュを含むハッシュを処理しないのはなぜですか?
- http://www.my.app/my_app#/resources
- http://www.my.app/my_app#/resource/some/link
- http://www.my.app/my_app#/resource/some/other/link
- http://www.my.app/my_app#/resource/some/other/link?page=2
- http://www.my.app/my_app#/resource/some/other/link?page=3
、 URLフラグメントは実際にはAPI呼び出しを行うために使用された生のURLです現在のページをレンダリングしました。
問題は、ロケーションハッシュにスラッシュ文字が含まれていると、Sammyのルート処理が正しく機能しないことがあります。理由はわかりません。 RFC3986によれば、 "スラッシュ("/")と疑問符("? ")はフラグメント識別子内のデータを表すことができるので、エスケープされていないスラッシュと疑問符URLフラグメント内の文字。
いくつかのシナリオを網羅した完全な復習ケースです。 2つのSammyルートが定義されています。構文の理解が正しい場合は、ハッシュを含むものをすべて捕捉し、もう1つは空のルートと一致する必要があります。しかし、それは起こっていることではありません。
<!DOCTYPE html>
<html>
<head>
<title>SammyJS routing demo</title>
<script type="text/javascript" src="Scripts/jquery-3.1.1.min.js"></script>
<script type="text/javascript" src="Scripts/sammy-0.7.5.min.js"></script>
</head>
<body>
<ul>
<li><a href="#foo">#foo</a> - prints 'foo'</li>
<li><a href="#/bar">#/bar</a> - prints 'NOPE'</li>
<li><a href="#!/baz">#!/baz</a> - prints 'NOPE'</li>
<li><a href="#foo/bar">#foo/bar</a> - prints 'NOPE'</li>
<li><a href="#foo/bar#bop">#foo/bar#bop</a> - prints 'bop'</li>
<li><a href="#why?not">#why?not</a> - prints 'why'</li>
<li><a href="#why?not#zoidberg">#why?not#zoidberg</a> - prints 'why?not#zoidberg'</li>
<li><a href="#why?not#zoidberg/">#why?not#zoidberg/</a> - prints 'NOPE'</li>
</ul>
<script type="text/javascript">
Sammy(function() {
this.get('#:url', function() { console.log(this.params.url); });
this.get('', function() { console.log('NOPE'); });
}).run();
</script>
</body>
</html>
サミーがこれらの断片を一貫して扱うために必要なことは何ですか?