4

私は次のような状況にあり、それに対処する最善の方法はを使用することだと思いますBackbone relation
別の解決策があれば修正してください。

1 つのコレクション (1) と 1 つのモデル (2) があります。
収集結果は (3) のようになり、モデルの結果は (4) のようになります。

最終的に、ビューは次のようになります (5)。

私の質問は次のとおりです
。1)Backbone relationこの状況を処理するために使用できますか?2) はいの場合、から必要なデータを自動的に取得するには
、 をどのように書き直せばよいですか?FeedsCollectionUserModel


(1)

// FeedsCollection
var FeedsCollection = Backbone.Collection.extend({
    url: "http://localhost/feeds"
});

(2)

// User Model
var UserModel = Backbone.Model.extend({
    url: "http://localhost/user"
});

(3) feedsCollectionの結果

//feedsCollection.toJSON(); 

[
   {id:1, message: "something one", creator_id: 100},
   {id:2, message: "something two", creator_id: 101},
]

(4) userModel の結果

userModel = new UserModel({id: 100});
userModel.fetch();
userModel.toJSON(); // {id:100, name: "jhon"}

userModel = new UserModel({id: 101});
userModel.fetch();
userModel.toJSON(); // {id:101, name: "herry"}

(5) 最後に、ビューの結果は次のようになります。

[
    {message: "something one", creator_id: 100, name: "jhon"},
    {message: "something two", creator_id: 101, name: "herry"},
]
4

1 に答える 1

0

サーバーからユーザーの名前を直接返すことを検討しましたか。URL「/feeds」が返されるように:

[
    {message: "something one", creator_id: 100, name: "jhon"},
    {message: "something two", creator_id: 101, name: "herry"},
]

ユーザーの名前をメッセージの近くに表示したいだけの場合、これは簡単な解決策のようです。サーバーのバックエンドが何であるかはわかりませんが、これは効率的に実行できると確信しています。

だからあなたの質問に答える:

1)この状況を処理するためにバックボーン関係を使用することは可能ですか?

おそらく、プラグインを使用してこの状況を解決することはできますが、この特定の例を解決するためにプラグインを導入することはお勧めしません。私には、サーバーにユーザーモデルを照会して、名前を表示するだけでは非効率に思えます。ただし、さまざまな状況では、これが適切な場合があります。

とにかく、プラグインありまたはプラグインなしでユーザーモデルをロードすることにした場合に備えて。それが価値があるかどうかを理解するために、いくつかの質問をする必要があります。

  1. これにより、いくつのクエリが生成されますか?ユーザーごとに1つは多すぎる可能性があります。
  2. 1つのリクエストですべてをロードした場合、サーバーはいくつのユーザーモデルを返しますか?すべてのユーザーは多分そうかもしれません。したがって、必要なものだけをロードする必要があります。
  3. サーバーはどのくらいのデータを返しますか?本当にすべてのユーザーの属性が必要ですか?

したがって、結論として、サーバーから直接ユーザーの名前を返し、その名前以上のものが必要な場合にのみ特定のユーザーモデルをロードすることをお勧めします。

于 2013-03-01T10:28:45.250 に答える