5

しばらくの間、これを起動して実行しようとしています。基本的に、jsonを返すバックエンドとして残りのAPIがありますが、すべて問題ありません。

私が抱えている問題は、バックボーンリレーショナルにあります。私は何かが間違っていると確信していますが、ネットをしばらく検索していて、助けになるものが見つかりませんでした.

モデル「職業」と「武器」の間に多くの関係を持たせようとしています。そのための私のコードは次のとおりです。

Profession = Backbone.RelationalModel.extend({
    urlRoot: '../api/professions',

    relations: [{
        type: Backbone.HasMany,
        key: 'weapons',
        relatedModel: 'Weapon',
        collectionType: 'Weapons',
        reverseRelation: {
            key: 'profession',
            includeInJSON: 'id',
            keySource: 'profession_id'
        }
    }]
});

Weapon = Backbone.RelationalModel.extend({
    urlRoot: '../api/weapons'
});
Weapons = Backbone.Collection.extend({
    model: Weapon,

    url: function(models){
        return '../api/weapons';
    }
});

これらの API エンドポイントを呼び出すと、次のものが返されます。

{name: "Profession1", id: 1}

[{name: "Weapon1", profession_id: 1}, {name: "Weapon2", profession_id: 1}]

したがって、私が正しく理解している場合profession.fetchRelated('weapons')は、武器コレクションの URL に httprequest を送信し、profession_id が 1 のオブジェクトをプルする必要があります。しかし、実行しても何も起こりません。profession.fetchRelated('weapons')

4

2 に答える 2

9

したがって、私が正しく理解している場合、profession.fetchRelated('weapons') は武器コレクションの URL に httprequest を送信し、profession_id が 1 のオブジェクトをプルする必要があります。しかし、profession.fetchRelated('weapons') を実行しても何も起こりません。 )

これは、バックボーンリレーショナルが機能することを理解する方法ではありません-古いバージョンで作業しており、最新バージョンをまだ調査していないという警告があります。

私の理解では、Backbone-relational は、API 応答とは異なるように見えるデータを必要としています。

Backbone-relational は、完全にネストされた親モデルの応答で、ネストされたモデルへの参照を望んでいると思います。

{
  name: "Profession1", 
  id: 1, 
  weapons: [
    {name: "Weapon1", profession_id: 1}, 
    {name: "Weapon2", profession_id: 1}
  ]
}

その場合、ネストされたモデルを完全に設定します。

または、参照として:

{
  name: "Profession1", 
  id: 1, 
  weapons: ['weapon1','weapon2']
}

その場合、Backbone-relational は関連するキーを内部に隠しますが、空のコレクションを提示します。fetchRelated次に、関連するモデルの完全なデータを取得するために使用します。

assassin.fetchRelated('weapons')

個別のリクエストとして、または API がセット リクエストを受け入れる場合は単一のリクエストとして、id'weapon1'とを使用して武器をリクエストし、次のようなレスポンスを期待します。'weapon2'

{id: 'weapon1', name: "Weapon1", profession_id: 1}

カスタム関数を作成する以外に、API 応答を操作するための組み込みの迅速な方法があるかどうかは、頭の中でわかりません。

于 2012-03-15T14:34:54.757 に答える
2

Edward が書いたことに付け加えると、fetchRelated を機能させる方法は次のとおりです。まず、Edward が主張したように、API が既に JSON 応答のデータをネストしている場合、fetchRelated は何も返しません。したがって、Django-Tastypie でリソースが full=True を使用するように設定されている場合:

movies = fields.ToManyField('movie.api.MovieResource', 'user', full=True)

次に、次のようなもの、

myuser.fetchRelated("movies")

関連するデータはすでに JSON 応答に含まれているため、何も返されません。ただし、フェッチ関連が特に役立つのは、遅延読み込みを実行しようとしている場合です。したがって、Django-Tastypie フィールドに full=False があり、JSON 応答にそのエントリの ID とリソース URI のみが含まれている場合、fetchRelated を使用して実際にそのデータを入力できます。

myuser = new User({id: 1})
myuser.fetch()
myuser.fetchRelated("movies")

これで、関連する映画コレクションにアクセスできるようになりました。Tastypie-Backbone プラグインも使用している場合は、コレクションで特別な URL return ステートメントを作成することについて心配する必要はありません。/2;3;7 の Tastypie 選択構文を使用して、すべてを実行します。

于 2012-05-23T22:55:33.233 に答える