Q1: When given some instance of DS.Model, how does DS.Store figure out what child-class of DS.Model it is?
Q2: Where and how do DS.Model child-classes get registered with the main ember application?
Q3: Say you have some model Person = DS.Model.extend(...) and some PersonAdapter = DS.ActiveModelAdapter.extend(...), when does Ember go about and register your PersonAdapter and figuring out it should be used with the Person model?
I'm trying to create something very like the DS.Adapter system for Ember, except instead of handling ajax requests for data persistence, it would do data live updates, but I'm confused at exactly how Ember goes about registering its parts.
It is all about the resolver who does this job for you.
Ember convention is to have adapter & serializer per model which comes abs brilliant when you go into later stage in your project. If you intent to have model Person Ember would expect that you provide Person(Model) , PersonSerializer ,PersonAdapter where missing will use the application default ones. Default ones are resolved with App.ApplicationAdapter, App.ApplicationSerializer .
So if you do store.find('person', 1) Ember's default resolver would try App.Person then resolve the adapter App.PersonAdapter || App.ApplicationAdapter and App.PersonSerializer || App.ApplicationSerializer.
1) Store will use the resolver to identify the class
var attr = DS.attr;
App.Person = DS.Model.extend({ firstName: attr(), lastName: attr(), birthday: attr() });
store.find('person', 1);// resolver will search in App.Person (classified name) namespace (ember-cli will do that a bit differently)
2) the application namespace where the resolver performs the lookup - check App.__container__ registry
3)That's how the resolver work it checked as stated above.
Hope this helps you.