0

[編集]回答済み[/編集]

私は Backbone を使い始めたばかりで、理解できないつまずきに遭遇しました。

サイトの JSON-API にリクエストを送信してカテゴリ別に投稿を取得する次のコレクションがあります。

Posts.Collections.CategoryPosts = Backbone.Collection.extend({

initialize: function(options) {
    this.id = options.id;

    var intRegex = /^\d+$/;

    if(intRegex.test(this.id)) {
        this.url_querystring = '?id=' + this.id;
    }
    else {
        this.url_querystring = '?slug=' + this.id;
    }
},

url: function() {
    return '/api/core/get_category_posts/' + this.url_querystring;
},

model: Posts.Models.CategoryPost
});

さて、これは魅力的です。しかし、問題は次のとおりです。この戻り値の JSON は実際には次のとおりです。

{
    "status": "ok",
    "count": 10,
    "count_total": 79,
    "pages": 7,
    "category": { ... }
    "posts": [
        { ... },
        { ... },
    ...
    ]
}

したがって、コレクションを使用するコードが個々のモデルfetch()に戻り値を割り当てようとすると、Post作成するのは 1 つだけです。

JSON リターンの「post」サブオブジェクトを使用してモデルを作成する必要があることを Backbone に伝えるにはどうすればよいですか? これについては、実際にはあまり多くないようです。または、何を検索すればよいか正確にわかりませんか?

答えを出すのではなく、正しい方向へのプッシュが望ましいです。

4

1 に答える 1

2

その答えは、コレクションに解析関数を定義することにありました。

Posts.Collections.CategoryPosts = Backbone.Collection.extend({

    initialize: function(options) {
        this.id = options.id;

        var intRegex = /^\d+$/;

        if(intRegex.test(this.id)) {
            this.url_querystring = '?id=' + this.id;
        }
        else {
            this.url_querystring = '?slug=' + this.id;
        }
    },

    // Make sure you parse the correct JSON object!
    parse: function(response) {
        return response.posts;
    },

    url: function() {
        return '/api/core/get_category_posts/' + this.url_querystring;
    },

    model: Posts.Models.CategoryPost
});
于 2013-06-23T14:56:56.447 に答える