Using Remote Objects in JavaScript

The JavaScript models that are generated by the Remote Objects components provide a JavaScript API to create functions for your app that read and save values back to Salesforce. Use the base model that is created by the <apex:remoteObjects> component to instantiate specific models for corresponding sObjects. Then use the specific models to perform actions on their sObjects, such as retrieving, creating, updating, and deleting.
The base model for your Remote Objects is created by the <apex:remoteObjects> component. The base model provides a pseudonamespace for Remote Objects that you create with it. By default the base model is named SObjectModel, but you can set the name by using the jsNamespace attribute. Use different base models to group related Remote Objects along functional or package lines. For example:
<apex:remoteObjects jsNamespace="MyCorpModels">
    <apex:remoteObjectModel name="Contact" fields="FirstName,LastName"/>
</apex:remoteObjects>
<apex:remoteObjects jsNamespace="TrackerModels">
    <apex:remoteObjectModel name="Shipment__c" fields="Id,TrackNum__c"/>
</apex:remoteObjects>

Specific Models

You don’t normally create a base model yourself but instead use the generated base model as a factory for creating specific models. For example, with the above declaration, instantiate a Contact model in JavaScript like this:
var ct = new MyCorpModels.Contact();
Note that ct is a JavaScript model for the Contact object, not a specific Contact record.

ct represents a specific object, Contact, and provides a connection between your page’s JavaScript and the Salesforce service. ct can be used to perform the basic “CRUD” operations—create, read, update, and delete—on contact objects in the database.

In the following sections, examples are based on the following Remote Objects declaration, which uses all three Remote Objects components and shows how to add a custom field, Notes__c, with a “shorthand” name to make accessing it in JavaScript more natural.
<apex:remoteObjects jsNamespace="RemoteObjectModel">
    <apex:remoteObjectModel name="Contact" fields="Id,FirstName,LastName,Phone">
        <apex:remoteObjectField name="Notes__c" jsShorthand="Notes"/>
    </apex:remoteObjectModel>
</apex:remoteObjects>
This declaration enables you to access five fields on Contact records.

Instantiating Models and Accessing Fields

Instantiate a model with or without field values set, depending on your intent. Generally, you’ll set fields when you want to write changes to the database and omit fields when you’re just reading. Field values are set by passing in a JSON string with values for the fields to set on the new model.

To create a model without fields set, create it with an empty parameters list.
var ct = new RemoteObjectModel.Contact();
To instantiate a model with fields set, typically to create a new record, pass in an object that contains field name and value pairs. For example:
var ct = new RemoteObjectModel.Contact({ 
    FirstName: "Aldo",
    LastName: "Michaels", 
    Phone: "(415) 555-1212"
});
Remote Objects models use basic get() and set() methods to retrieve and set field values. For example:
var ct = new RemoteObjectModel.Contact({ FirstName: "Aldo" });
ct.get('FirstName');  // 'Aldo'
ct.get('Phone'); // <undefined>
ct.set('FirstName', 'Benedict');
ct.set('Phone', '(415) 555-1212');
There’s no functional difference between setting field values with a properties list in the constructor and setting field values with set().