0

次のようなコメントのストリームを表す JSON があります。

var comments = [
    { "comment_id": 1, "author_id": 100, "text": "hello world!" },
    { "comment_id": 2, "author_id": 120, "text": "cheers world!" },
    { "comment_id": 3, "author_id": 100, "text": "goodmorning world!" },
    { "comment_id": 4, "author_id": 100, "text": "goodnight world!" } ]

お気づきかもしれませんが、author_id100 人が 3 回コメントしました。

authors データを含む別の JSON があります。次に例を示します。

var authors = {
    100: {"username": "ciccio"},
    120: {"username": "pernacchia"} }

テンプレートのレンダリング中にこれら 2 つの JSON を結合し、 as キーauthorsを使用して検索したいと思います。author_id次のようなヘルパーがあると便利です。

<div class="comments">
    <!-- `join` takes an iterable, a lookup dict, a key,
          and a new name for the joined property -->
    {{#join comments authors "author_id" "author"}}
    <div class="Comment">
       {{author.username}} says: {{text}}
    </div>
    {{/join}}
</div>

これを行うヘルパーを書き留めようとしましたが、ヘルパー内authorsの辞書を参照する方法がわかりません。

現在、2 つの dict を手動で結合し、テンプレート用のアドホックな新しいJSONを作成しています。しかし、この作業をテンプレートに委譲することは素晴らしいことです。

4

1 に答える 1

0

コードの多くの場所でこの結合を行う場合を除き、ヘルパー関数を定義する価値はないと思います。Javascript / JQueryでそれを行うだけです:

$.each(comments, function(key, comment) {
    var author_id = comment.author_id;
    var comment_text = comment.text;
    if (authors[author_id]) {
        if (authors[author_id].text) {
            authors[author_id].text = authors[author_id].text + " " + comment.text;
        } else {
            authors[author_id].text = comment.text;
        }
    }
});

上記は「text」フィールドを「authors」レコードに追加するため、この後は「authors」リストを反復処理するだけです。本当に熱心な場合は、これをヘルパー関数に変換することもできます。

実際に見てみましょう: http://jsfiddle.net/DUkFa/

于 2012-12-20T04:22:51.847 に答える