私のセットアップはjQueryMobile(JQM)、マルチページ、JSON、Handlebars.jsです。
アイテムのリストがあります。各アイテムは、ページ全体の説明にリンクしています。
<div data-role="page" id="document-library">
<div data-role="content">
<ul>
<div id="handlebarsDocuments">This will get replaced by handlebars.js</div>
<script id="TemplateDocuments" type="text/x-handlebars-template">
{{#documents}}
<li style="float:left;padding:10px 0;width:100%;">
<a href="#documentID{{documentID}}" data-transition="slide">
<strong>{{documentName}}</strong>
</a>
</li>
{{/documents}}
</script>
</ul>
</div>
URLがlocalhost/index.html#documentID20に変更されます。すばらしい、リンクは機能します。
問題は、documentID20に固有のデータをロードするページを取得できないことです。JQMは、data-role = "page" divの外部にある場合、JavaScriptを開始しません。さらに、複数ページあるので、リンクをクリックする前にデータがそこにある必要があると思います。
data-role = "page"の周りにハンドルバーをラップすると、機能しません。
<div id="handlebarsDocView">This will get replaced by handlebars.js</div>
<script id="TemplateDocView" type="text/x-handlebars-template">
{{#documents}}
<div data-role="page" id="document{{documentID}}">
<div data-role="content">
{{#each_when documents "documentID" "20"}}
{{documentName}}
{{/each_when}}
</div>
</div>
{{/documents}}
</script>
JSONファイルは次のようになります...
{
"documents": [
{
"documentID": 20,
"conversationID": 100,
"documentName": "K1711EA1 Course",
"timeStamp": "2012-10-09T12:51:50Z",
"documentType": "documents"
},
{
"documentID": 21,
"coversationID": 100,
"documentName": "K17E10CTEC Student",
"timeStamp": "2012-10-09T07:51:50Z",
"documentType": "pdf"
}
]
}
これは、動作時にeach_を取得するためにhandlebars.jsファイルに追加されました。
Handlebars.registerHelper('each_when', function(list, k, v, opts) {
console.log(arguments);
var i, result = '';
for(i = 0; i < list.length; ++i)
if(list[i][k] == v)
result = result + opts.fn(list[i]);
return result;
});