11

私はバックボーンリレーショナルを初めて使用します。HasMany を使用する正しい方法がわかりません。

私は多くのParentモデルを持っていますchildren(「多く」とは、何千もの子供を意味します)。パフォーマンスの問題を回避するために、 in の巨大なリストを作成する代わりに、外部キー: で子をクエリし/child/?parent=1ます。しかし、これはバックボーン リレーショナル作業の方法ではないようです。child_idsParent

だから私はこれを処理する正しい方法は何だろうと思っています。

1、json api を変更して、子 ID のリストを親に含めてから、バックボーン リレーショナルが推奨するように数千の ID を送信します。

url = function(models) {
  return '/child/' + ( models ? 'set/' + _.pluck( models, 'id' ).join(';') + '/' : '');
}
// this will end up with a really long url: /child/set/1;2;3;4;...;9998;9999

2、バックボーンリレーショナルの多くのメソッドをオーバーライドし、この状況を処理させます。私の最初の考えは:

relations: [{
  collectionOptions: function(model){
    // I am not sure if I should use `this` to access my relation object 
    var relation = this;
    return {
      model: relation.relatedModel,
      url: function(){
        return relation.relatedModel.urlRoot + '?' + relation.collectionKey + '=' + model.id;
      }
    }
  }
}]
// This seems work, but it can not be inherent by other model
// And in this case parent will have am empty children list at beginning.    
// So parent.fetchRelated() won't fetch anything, I need call this url my self.

3, Backbone-relational のみを Store として使用し、次に Collection を使用して関係を管理します。

4、その他の魔法の方法またはパターンまたはバックボーン フレームワーク

手伝ってくれてありがとう。

4

1 に答える 1

1

これが私の現在のプロジェクトで行っている解決策です。ProjecthasMany のコメント、イベント、ファイル、およびビデオに注意してください。これらの関係とその逆の関係は、これらのモデルで定義されています。

Entities.Project = Backbone.RelationalModel.extend({
    updateRelation: function(relation) {
        var id = this.get('id'),
            collection = this.get(relation);

        return collection.fetch({ data: $.param({ project_id: id }) });
    }
});

連続する「WHERE」句として機能するパラメーターを受け取るように REST エンドポイントを構成しました。そのため、ユーザーが見る権利のないものを除外するために、サーバー側にさらにいくつかのロジックがproject.updateRelation('comments')あるリクエストを送信します。/comments?project_id=4(Laravel バックエンド、ところで)

于 2013-12-10T19:59:01.143 に答える