リモートオブジェクトを使用したレコードの更新
リモートオブジェクトモデルインスタンスで update() をコールすることでレコードを更新します。
update() は 3 つの引数 (すべて省略可能) を受け入れ、指定された引数に応じて 1 つまたは複数のレコードを同時に更新できます。
1RemoteObjectModel.update([record_ids], {field_values}, callback_function)
record_ids は、文字列の配列で、文字列は更新するレコードの Id です。このパラメータが省略されると、リモートオブジェクトインスタンスに設定された Id が使用されます。update() をそのままコールするのが、最も単純なレコード更新方法です。
1ctDetails = {FirstName: "Marc", LastName: "Benioff"};
2ct = new RemoteObjectModel.Contact(ctDetails);
3ct.create();
4
5// Later, in response to a page event...
6ct.set('Phone', '555-1212');
7ct.update();多くの場合、フォームの送信に応じたレコードの更新などが必要になります。レコードの更新は、レコードの Id など、フォームの値を読み込み、その値を update() に渡すだけの簡単な処理です。次に例を示します。
1var record = new RemoteObjectModel.Contact();
2record.update($j('#contactId').val(),
3{
4 FirstName: $j('#fName').val(),
5 LastName: $j('#lName').val(),
6 Phone: $j('#phone').val(),
7 Notes: $j('#notes').val()
8});堅牢なコードには、エラーを処理するコールバックが含まれます。次のコードは、前のサンプルと同じ処理を実行しますが、イベントハンドラとコールバック関数を使用するように変更されています。
1// Handle the Save button
2function updateContact(e){
3 e.preventDefault();
4
5 var record = new RemoteObjectModel.Contact({
6 Id: $jQuery('#contactId').val(),
7 FirstName: $jQuery('#fName').val(),
8 LastName: $jQuery('#lName').val(),
9 Phone: $jQuery('#phone').val(),
10 Notes: $jQuery('#notes').val()
11 });
12 record.update(updateCallback);
13}
14
15// Callback to handle DML Remote Objects calls
16function updateCallback(err, ids){
17 if (err) {
18 displayError(err);
19 } else {
20 // Reload the contacts with current list
21 getAllContacts();
22 $jQuery.mobile.changePage('#listpage', {changeHash: true});
23 }
24}実行する更新が統一されている限り、つまりどのレコードに対しても同じ場合は、同時に複数のレコードを更新できます。たとえば、リストから選択した項目の集合を更新して、状況項目を「アーカイブ済み」や現在のタイムスタンプに変更する必要がある場合などです。1 つの要求で複数のレコードを更新するには、Id の配列を update() に渡します。更新する項目は、リモートオブジェクトモデル自体の一部として設定できますが、次のように update() に直接渡す方が確実です。
1var ct = new RemoteObjectModel.Contact();
2ct.update(
3 ['003xxxxxxxxxxxxxxx', '003xxxxxxxxxxxxxxx'],
4 { FirstName: "George", LastName: "Foreman" },
5 function(err, ids) {
6 if (err) {
7 displayError(err);
8 } else {
9 // Reload the contacts with current list
10 getAllContacts();
11 $jQuery('#status').html(ids.length + ' record(s) updated.');
12 $jQuery.mobile.changePage('#listpage', {changeHash: true});
13 }
14});