Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Make Ember.js Behave with Grails Controller Names?

Grails is pretty powerful, and lets you turn your Domain objects into JSON with a single statement (object as JSON). Unfortunately, this is not sufficient to interact with Ember.js for a few reasons.

How can I make Grails play nicely with Ember.js?

like image 599
Zach Riggle Avatar asked Dec 15 '22 13:12

Zach Riggle


1 Answers

Good question, self!

Ember.js, and its auto-AJAX-in-browser-data-store ninjitsu expect the URL to look a certain way, and the JSON to look a certain way. Due to the way that each tool works, it's easier to make conforming changes to both sides of the equation!

What Grails Provides

For a Domain class MyCoolDomainClass with a controller MyCoolDomainClassController, Grails wants to provide the URL /app/myCoolDomainClass. If you set up the controller to contain something along the lines of:

def index() { render MyCoolDomainClass.list() as JSON }

You'll get a response that looks like:

[{ id: 1, name: "Bob"}, {id: 2, name: "Sally"}]

What Ember Wants

In Ember.js, you might create a Model with the same properties. By leveraging ember-data, you can easily hook up the Data Store in the browser with your backend. Unfortunately, what Ember.js wants is different. It expects the the url /my_cool_domain_class to provide the data:

{ mycooldomainclass: [ { id: 1, name: "Bob"}, {id: 2, name "Sally"}] }

Reconciling

UPDATE: I've created a ember-data-grails repo on Github which takes care of all of these modifications for you, and demonstrates how to make a controller that plays along nicely!

like image 75
Zach Riggle Avatar answered Dec 28 '22 05:12

Zach Riggle