Ok, it's been a couple of weeks (this is not the only thing I'm working on) and not too much progress. Getting my head around Ember has been a nightmare, not helped at all by the fact it is a moving target, especially in the case of Ember-Data.
So much of a moving target that the whole thing shifted into RC mode.
So, a lot of changes have had to be made.
Die, Coffeescript, Die Die Die.
The other thing is I cannot express deeply enough my hatred of Coffeescript. It seems, well, pointless. It seems to be used to write Javascript and I really don't see any advantages over just writing Javascript. It is argued that it is smaller, but that is not really the point when it is unreadable.
It is like I say that I write my letters in Japanese, which will eventually be converted to English, because in Japanese I can use a single Kanji character to express a whole word or concept in English. The fact that you have to learn Japanese to accomplish something you could adequately do from the start is the killer.
So, I have ditched Coffeescript for now.
Ember Store
So, the store.js file now looks like this:
HorseFeeder.ApplicationAdapter = DS.RESTAdapter.extend({ namespace: 'api/v1' });
Lesson #1 - don't use DS.ActiveModelSerializer
If I put this line in:
HorseFeeder.ApplicationSerializer = DS.ActiveModelSerializer.extend({});
everything stops parsing. Even though I am using ActiveModelSerializer on the Rails side.
Routes
Routing has changed in Ember-Data. It's a little simpler, but, they got rid of the store object, which means that you can't call the store directly from Firebug.Routes now look like this:
HorseFeeder.EventDaysIndexRoute = Ember.Route.extend({ model: function() { return this.store.find('event_day'); } }); HorseFeeder.EventDaysShowRoute = Ember.Route.extend({ model: function(params) { obj = this.store.find('event_day', params.event_day_id); return obj; } });
Serializers
Right now it looks like this (see 'current crisis points' below):
class EventDayIndexSerializer < ActiveModel::Serializer attributes :id, :day has_many :events, embed: :ids, key: :events end
Note that if I don't do that key: :events thing Ember doesn't see the objects.
Current Crisis Points
Right now the backend is spewing out data and the front end is taking it. i.e. I am doing what all the Ember tutorials on the web do. But that is not the real world. Here are a list of my current pain points
- When I send out a list of objects in an index call, I do not want to send out all their associations/children because that would mean basically dumping the whole database, right?! As all objects are related to each other in my model it is unmanageable and slow. I am fixing this right now by writing serializers that only dump out the object, not the children.
- If you do what I do above (with the limited data at the index level) I cannot figure out how to get Ember to reload the object on the 'show' so I can fill in all the data. To me this seems to be such an obvious way to do it I can't believe I've spent 2 days trying to get it to work.
- What doesn't the ActiveModelSerializer in Ember work for AMS in Rails?
- The pain and time so far have caused me to question the wisdom of using Ember!
I have a few open StackOverflow questions... so hopefully my next instalment will be all sweetness and light.
No comments:
Post a Comment