私は 'hasMany' ModelBインスタンスを持つことができるModelAのインスタンスを持っているとします。すでにサーバー上に存在するModelBレコードのIDを与えられた場合、モデルAをモデルBに関連付けるにはどうすればよいですか? (APIドキュメントでは、新しいモデルBのインスタンスとデータベースレコードを同時に作成することによってこれを行う方法のみを示しています)。ExtJS 4:モデルを別の既存のモデルとIDで関連付ける方法はありますか?
例として、PersonオブジェクトとMeetingオブジェクトとのスケジュールミーティングに使用できるアプリがあります。サーバーは、会議のために、このようにJSONを返すことがあります:
会議:
{
id: '10',
purpose: 'Code review',
time: <timestamp>,
attendees: [ 501, 532 ]
}
人:私は理解して
Ext.define('Person', {
extend: 'Ext.data.Model',
fields: ['id', 'name', 'email'],
proxy: {
type: 'rest',
url : 'data/people',
reader: { type: 'json' }
}
});
Ext.define('Meeting', {
extend: 'Ext.data.Model',
fields: ['id', 'purpose', 'time'],
hasMany: { model: 'Person', name: 'attendees' }
proxy: {
type: 'rest',
url : 'data/meetings',
reader: { type: 'json' }
}
});
:
{ id: 501, name: 'Kermit', email: '[email protected]' }
モデルは次のように定義される可能性がありますかつて会議がロードされていること。私はmeeting.attendees()を呼び出して各Personモデルにアクセスできます。ただし、新しい出席者ID(たとえば599)があれば、別の人をどのように会議に追加できますか? id 599のPersonインスタンスをロードし、そのインスタンスを '出席者'に追加する唯一のオプションですか?
Meeting.load(10, {
success: function(meeting) {
Person.load(599, {
success: function(person) {
meeting.attendees().add(person);
meeting.save();
}
});
}
})
meeting.save()を実行すると、POSTには人のIDだけが正確に含まれますか?
{
id: '10',
purpose: 'Code review',
time: <timestamp>,
attendees: [ 501, 532, 599 ] <-- '599' is new attendee
}
ありがとうございます!
多くのミーティングに出席でき、ミーティングには多くの人が参加できるため、多対多の関係を使用しているはずです。 IDのリスト、配列などは悪いことです。 – rwilliams
ありがとうございました。つまり、これは単純な類推に過ぎませんでした。実際には、アソシエーションは本当に1対多数であり、データベース(MongoDB)の好ましいアプローチではIDの配列を使用しています。しかし、要点。 –
ここでは、EXT JS 4の文書データベースの処理を改善するために行われた作業についての記事を掲載します。 http://www.sencha.com/forum/showthread.php?127547-Sencha-Platform-denormalized-Data-patch CouchDBでSencha Touchのパッチを適用したバージョンを使用しています。 – rwilliams