web-dev-qa-db-ja.com

Backbone.js:複数のモデルを組み合わせた複雑なビュー

これまでに試したすべてのテストとチュートリアルでは、頭の中で構造を取得するために、ビューが1つのモデルにバインドされていることを示しています。

連絡先の詳細(アドレス帳)を保存および管理する小さなアプリがあるとします。ログインできる複数のユーザーがいて、それぞれに独自の連絡先のコレクションがあります。

ユーザー詳細ビューはユーザーモデルにバインドされ、同じことが連絡先にも適用されます

しかし、これら2つのX軸を組み合わせたグリッドを表示して、アプリのY軸にすべての連絡先を表示し、すべてのユーザーを表示するとします。

これはどのように機能しますか?新しいビューにバインドするために、このための新しいモデルを作成する必要がありますか?

あなたはアイデアを得ます、それは私がそのアプリを構築していない理論的な例にすぎませんが、複数のモデルを組み合わせたビューを持つというアイデアを得ることです

31
Sander

その場合、両方のサブモデルを含む動的モデルを検討します。あなたのルートハンドラーでは、次のようなことができます:

var model = new Backbone.Model();
model.set({contacts: new ContactsModel(), users: new UsersModel()});
var view = new GridView({model: model});

もちろん、モデルを個別に渡すことを妨げるものは何もありません。

var contacts = new ContactsModel();
var users = new UsersModel();
var view = new GridView({model: contacts, users: users})

モデルが何であるかを混同しないので、私はまだ最初の複合アプローチを好みます。

50
Brian Genisio

同じパラメーターを使用しないことが確実な場合は、両方のモデルをマージすることもできます。

_var modelA = new myModel({ color: "blue" });
var modelB = new otherModel({ age: 35 });

var superModel = new Backbone.Model();
superModel.set(modelA);
superModel.set(modelB);

console.log("color:", superModel.get("color"));
console.log("age:", superModel.get("age"));
_

Backbone.Model.extend()も見てください

7
ximonn