私は現在、次のようなユーザーのコレクションにアイテムを取得しています。
me.user = Backbone.Collection.Users.collection().get(id);
これにより、アプリで必要なデフォルトの属性セットが返されます。ユーザープロファイルページで、他の場所では必要のない追加の属性を表示したいと思います。
指定できる追加の属性を持つコレクション(サーバーにクエリを実行する)内のアイテムを取得するにはどうすればよいですか?
ありがとう
私は現在、次のようなユーザーのコレクションにアイテムを取得しています。
me.user = Backbone.Collection.Users.collection().get(id);
これにより、アプリで必要なデフォルトの属性セットが返されます。ユーザープロファイルページで、他の場所では必要のない追加の属性を表示したいと思います。
指定できる追加の属性を持つコレクション(サーバーにクエリを実行する)内のアイテムを取得するにはどうすればよいですか?
ありがとう
コレクションはすでにインスタンスですか? その場合は、次のことのみを行う必要があります。
me.user = Backbone.Collection.Users.collection.get(id);
つまり、コレクション後に括弧 () を削除します。
コメントに沿って、私が望むのは、2 つのユーザー モデルを作成する代わりに、追加のモデルを作成することです。
これを行う 1 つの方法は、異なるモデル間に関係を与えることです。
モデルuser
が単に名前と電子メールで構成されているとします。それはいいことですが、ページにユーザー プロファイル (または意図した「追加」) をレンダリングすることも必要です。これは、必要な追加データを表す別のモデルを作成する良い機会のようです。
いくつかの方法があります。たとえば、すべてのユーザーがプロファイルを持っている場合、それをユーザー モデルに焼き付けることができます。ユーザーモデルを作成するときのようなもの:
user.profile = new Profile(); // model
モデルの属性の中に他のモデルを入れている人を見user.set('profile', new Profile())
たことがありますが、これが良いアイデアかどうかはわかりません。モデルの属性をそのモデルだけに分離しておくのが好きです。
各プロファイル モデルには、model.id に対応する URL があります。
したがって、 user.profile.fetch() だけで、そのプロファイル属性を使用してビューにデータを入力できます。たぶん /user/1/profile のようなことをします
あなたがほのめかしていると思われる質問のもう1つの側面は、コレクションをフェッチするときにサーバーからデータを一度に送信することです。おそらく、サーバーは次のようなデータで応答します。
[{"name":"Jake", "email":"j@stack.com", "profile":"{"aboutme":"Some story"}"}, ... ]
プロファイルデータはそれを持っている人だけが利用できます。この場合、parse()
関数を使用して余分なデータを引き出し、名前と電子メール属性をモデルセットメソッドに送信する前に何かを行うことができます。
ただし、最近、解析を使用して余分なデータを処理するのは悪い形式であると読んだと思います。set のオーバーライドしたがって、解析する代わりに、名前空間用にそれを保存してから、オーバーライドされた set メソッドで次のようにします。
set: function(attributes, options) {
if (!_.isUndefined(this.profile) && attributes.profile) {
this.profile = new Profile();
this.profile.set(attributes.profile);
} else if (attributes.profile) {
this.profile.set(attributes.profile);
}
delete attributes.profile;
return Backbone.Model.prototype.set.call(this, attributes, options);
}
アプリを使用しているメイン ユーザーなど、非常にユニークなユーザーに対して同様のことを行うことができます。アプリのユーザー モデル (ユーザー自身を表すもの) をインスタンス化するとき、そのユーザーだけが持つ他のいくつかの特別なモデル (認証データを取得するための認証モデルなど) も初期化します。
あなたが求めていたものを打ったかどうかはわかりませんが、何かを打ったことを願っています.