2

の を持つ というバックボーン モデルがUserありurlRootます/api/users。したがって、ID が 5 の新しいモデルを作成すると、URL は/api/users/5.

また、個々のユーザーの Twitter の友達を取得する別のエンドポイントも実装しました。これのエンドポイントは/api/users/:id/twitter-friends

this を使用して新しいコレクションを作成しurl、 を手動で設定する必要がありますidか、またはこのリクエストを作成して新しいコレクション インスタンス (そのユーザーの Twitter の友達) を返すメソッドをモデルに作成できますか? 例えば:

var user = new User({ id: 5 })
user.findTwitterFriends() // returns collection of users

または、この種のデータの一意のコレクションを作成します。

var user = new User({ id: 5 })

var users = new Users()
users.url = user.url() + '/find-friends/twitter' // /api/users/5/find-friends/twitter
users.fetch()

この方法で URL を処理するためのベスト プラクティスは何ですか? より良い方法はありますか?のユーザー名でユーザーを取得できる API エンドポイントなど、他の用途にも同様のニーズがあります/api/users/username/:username。このために、urlRoot を手動で設定する必要があります。

var user = new User({ username: username })
user.urlRoot = user.urlRoot + '/username/' + username
user.fetch()

おそらく、URL を別の方法で設計する必要がありますか? 私はすべての提案を受け入れます。

4

1 に答える 1

0

From my experience the best way it to override Backbone.sync, even in the model.

Looking at Backbone Model.fetch! you can see that it takes [options] . So from the top of my head I would say this would be a cleaner way. you could even only override the Backbone sync with your get user, and let Backbone handle the getUsers.

/*
this method is redundant.I added it to show you can add options as you go. 
*/

getUsers : function() {
    this.fetch({
        action = 'getUsers';
    });
}



getUser : function(username) {
    this.fetch({
        action = 'getSingleUser'.
        username = username;
    });
},

sync : function(method, model, options) {

        if(method === 'read'){
            if(options.action === 'getSingleUser') {
                                this.url = '/username/' + options.username;
                            }
            else this.url = '/find-friends/twitter';
            ret = Backbone.sync.apply(this, arguments);
            return ret;
        }
        else{
            return Backbone.sync.call(this, method, this, options);
        }
}
于 2014-04-09T08:33:23.273 に答える