When considering whether or not to use Ember.js, some stumble because Ember Data isn’t considered production ready. This is a little unfortunate given that you can use Ember without Ember Data by communicating directly with the server via AJAX.
However, for those who want want more than jQuery’s $.ajax()
, here are five alternatives worth checking out as a stop gap or replacement.
Ember-Model
Ember-Model is a lightweight model library extracted from a real application by Ember.js core-team member Erik Bryn. It supports a limited feature set in favour of speed and simplicity.
App.User = Ember.Model.extend({
id: Ember.attr(),
name: Ember.attr()
});
App.User.url = "/users";
App.User.adapter = Ember.RESTAdapter.create();
// Create and save a new user
var newUser = App.user.create({name: "Erik"});
newUser.save(); // POST /users.json
// Fetch an existing user
var existingUser = App.User.find(1); // GET /users/1.json
// Update an existing user
existingUser.set('name', 'Kris');
existingUser.save() // PUT /users/1.json
Erik has produced a helpful screencast covering Ember-Model in more detail. Check out Ember-Model on GitHub.
Ember-Resource
Ember-Resource has come out of Zendesk, the customer support company. It was most likely extracted from their online help desk, which is one of Ember’s earliest production applications.
App.User = Ember.Resource.define({
url: '/users',
schema: {
id: Number,
name: String
}
});
// Create and save a new user
var newUser = App.User.create({name: "James"});
newUser.save(); // POST /users.json
// Fetch an existing user
existingUser = App.User.create({id: 1}).fetch(); // GET /users/1.json
// Update an existing user
existingUser.set('name', 'Nathan');
existingUser.save(); // PUT /users/1.json
// Destroy an existing user
existingUser.destroy(); // DELETE /users/1.json
Grab a hold of Ember-Resource on Github.
Ember-RESTless
A library with a lightweight focus on the simple features of Ember Data is Ember-RESTless.
App.RESTAdapter = RL.RESTAdapter.create({
url: 'http://api.example.com'
});
App.Client = RL.Client.create({
adapter: App.RESTAdapter
});
App.User = RL.Model.extend({
name: RL.attr('string')
});
// Create and save a new user
var newUser = App.User.create({name: "Garth"});
newUser.saveRecord(); // POST /users.json
// Fetch an existing user
var existingUser = App.Post.find(1); // GET /users/1.json
// Update an existing user
existingUser.set('name', 'Gopal');
existingUser.saveRecord(); // PUT /users/1.json
// Destroy an existing user
existingUser.deleteRecord(); // DELETE /users/1.json
Read more about Ember-RESTless on GitHub.
Emu
Emu is a simple data access library for Ember.js
App.Store = Emu.Store.extend({
revision: 1
});
App.User = Emu.Model.extend({
name: Emu.field("string")
});
// Create and save a new user
var newUser = App.User.createRecord({name: "Charlie"});
newUser.save(); // POST /users.json
// Fetch an existing user
existingUser = App.User.find(1); // GET /users/1.json
// Update an existing user
existingUser.set('name', 'Jonnii');
existingUser.save(); // PUT /users/1.json
// Destroy an existing user
App.User.deleteRecord(existingUser); // DELETE /users/1.json
See Emu on GitHub.
Ember-REST
Creator Dan Gebhardt brands Ember-REST as a very simple library for RESTful resources that he extracted from an example app.
App.User = Ember.Resource.extend({
resourceUrl: '/users',
resourceName: 'user',
resourceProperties: ['name']
});
// Create and save a new user
var newUser = App.User.create({name: "Dan"});
newUser.saveResource(); // POST /users.json
// Fetch an existing user
existingUser = App.User.create({id: 1}).findResource(); // GET /users/1.json
// Update an existing user
existingUser.set('name', 'Jeremy');
existingUser.saveResource(); // PUT /users/1.json
// Destroy an existing user
existingUser.destroy(); // DELETE /users/1.json
Take a look at Ember-REST on GitHub
Conclusion
Although Ember Data is currently only being recommended to those who are comfortable with the cutting edge, these libraries provide viable alternatives. I haven’t gone into much detail save for the basics, but each offers a unique (though similar) approach and a variety of different features which merit further investigation. ■