ember-contextual-services
Services, for instances.
Installation
ember install ember-contextual-services
Usage
First define an instance service for an object type, eg for an ember-data Person
:
// app/contextual-services/person.js;; ;
Then we can inject the contextual-service
service and fetch the instance service for an object using serviceFor
:
// app/components/x-person/component.js;; ;
As a shorthand, instead of injecting and looking up using the contextual-service
we can use serviceFor
which is syntactical sugar for the same:
// app/components/x-person/component.js;; ;
Or in templates we can use the contextual-service
helper:
{{get (contextual-service person) 'fullName'}}
For simple properties, this is a bit overkill, but where it comes into its own is in conjunction with ember-concurrency:
// app/contextual-services/person.js;; ;
Contexts
serviceFor
takes a 2nd parameter as a "context" so you can split out functionality for an object type across separate files.
For example serviceFor(person, 'display')
will lookup the service from app/contextual-services/person/display.js
instead of just app/contextual-services/person.js
.
Service lookup
By default serviceFor
will use the ember-data modelName
in order to find the service.
You can change this by extending the service and overriding contextualServiceScope
:
;;
serviceFor uses the guid
as the id so that the same service instance is returned each time for the same object.
Again this can be changed by overriding contextualServiceID
, for example using the id
instead:
;;