2011-07-26 4 views
4

私は、外部APIから戻ってきたJSONデータのテンプレートシステムとしてmustache.jsを使用しようとしています。問題は、JSONオブジェクトにはハッシュで始まるキーがあり、その対処方法がわかりません。オブジェクト(および総単純化)の例:ハッシュをキーで処理する方法、mustache.js?

{ 
    "items": [ 
     "description": { 
      "#cdata-section": "Description goes here" 
     } 
    ] 
} 

Mustache.js:

var template = '{{#items}}' + 
        '{{#description}}' + 
         '{{cdata-section}}' + 
        '{{/description}}' + 
       '{{/items}}'; 

ことがキーの名前ではありませんので、明らかにそれはCDATAセクションを認識しません。 {{#cdata-section}}を使用することはできません。なぜなら、ハッシュはMustache.js内の条件文または列挙子を象徴するからです。私はそれをエスケープすることもできません、{{\#cdata-section}}は何も一致しません。

方法はありますか?または、JSONオブジェクトを前処理する必要がありますか?

+1

ソースコードを見ると、単に '#'の存在をチェックするので、私が思うところはかなりありません:https://github.com/janl/mustache.js/blob/master/mustache js#L100。 'include'関数は単に' indexOf'を使います。 – pimvdb

+1

@pimvdb - '#'も '^'もない場合は関数としてスキップします。そのため、どちらか一方がある場合は、その関数を処理します。 –

答えて

1

おそらくもっと良い解決策は、mustache.jsを変更することです。問題のある行は、^または#続く開始タグ、そしてその後、スペースの任意の量、少なくとも一つの文字、スペースの任意の量に一致する正規表現

this.otag + "(\\^|\\#)\\s*(.+)\\s*" + this.ctag 

line 106上にあるように思えます。

私は正規表現ではベストではないんだけど、適当な溶液は、それが{{\^または{{\#と一致しないことを主張して開始タグに従うことになります:

this.otag + "(?!\\\\)(\\^|\\#)\\s*(.+)\\s*" + this.ctag 

四重のバックスラッシュは次のようにはJavaScriptによって解釈されます\\ + \\ = \\と入力し、正規表現で\ + \ = \と入力します。私はこれをテストしていませんが、うまくいくはずです。

それはあなたのために働く場合は、そのGitHub repository

EDITであなたの変更のため、プルリクエストを開いて検討してください:私はスポットを逃したline 152に、あなたが同様の主張を追加する必要が表示されます。私はそれを読者に練習として残しておきます。

関連する問題