J'essaie de comprendre comment utiliser Ember.Application enregistrer et injecter des méthodes
A quoi servent ces fonctions? Comment doivent-ils être utilisés et quand?
J'aimerais vraiment savoir!
J'essaie de comprendre comment utiliser Ember.Application enregistrer et injecter des méthodes
A quoi servent ces fonctions? Comment doivent-ils être utilisés et quand?
J'aimerais vraiment savoir!
Ember par défaut de l'injection de dépendances lors du démarrage de votre application à l'aide de la plupart des conventions, par exemple si vous utilisez ember-data alors une instance de l' store
classe est injecté dans chaque route
et controller
dans votre application, de sorte que vous pouvez ensuite faire référence simplement en faisant this.get('store')
à l'intérieur de n'importe quelle route ou de contrôleur.
Par exemple, voici un code extrait où la valeur par défaut store
est enregistrée (prises à partir de la source)
Ember.onLoad('Ember.Application', function(Application) {
Application.initializer({
name: "store",
initialize: function(container, application) {
application.register('store:main', application.Store);
...
}
container.lookup('store:main');
}
});
Et puis injecté (source)
Application.initializer({
name: "injectStore",
initialize: function(container, application) {
application.inject('controller', 'store', 'store:main');
application.inject('route', 'store', 'store:main');
application.inject('dataAdapter', 'store', 'store:main');
}
...
});
En d'autres mots, register
et inject
sont des méthodes pour enregistrer les dépendances et de les injecter vous-même.
Supposons que vous avez un Session
objet dont vous remplissez après une demande de serveur au démarrage de l'application, et que vous voulez avoir une référence dans chaque contrôleur, vous pourriez faire quelque chose comme ceci:
var App = Ember.Application.create({
ready: function(){
this.register('session:current', App.Session, {singleton: true});
this.inject('controller', 'session', 'session:current');
}
});
App.Session = Ember.Object.extend({
sessionHash: ''
});
Ce code devrait définir l' session
de la propriété de chaque instance du contrôleur à une instance du singleton de App.Session
, de sorte que vous pouvez dans n'importe quel contrôleur n' this.get('session')
et obtenir une référence à elle, et depuis il est défini comme un singleton, il serait toujours le même session
objet.
Avec register
vous pouvez vous inscrire contrôleurs, modèles, vues, ou de n'importe quel type d'objet. inject
, dans l'autre main, peut injecter sur toutes les instances d'une classe donnée. Par exemple inject('model', 'session', 'session:current')
serait également d'injecter de l' session
de la propriété avec l' session:current
instance dans tous les modèles. Pour injecter de l' session
objet, disons, sur l' IndexView
on pouvait faire de l' inject('view:index', 'session', 'session:current')
.
Barbante register
et inject
sont très puissants vous devez les utiliser à bon escient et seulement dans le cas que vous savez vraiment il n'y a pas d'autre chemin pour atteindre votre objectif, je suppose que le manque de documentation est un indicateur de découragement.
Puisque C'est surtout un doit de fournir un exemple de travail avec une explication, là, il va: http://jsbin.com/usaluc/6/edit. Notez que dans l'exemple, on peut simplement accéder à la mentionné sessionHash
en se référant à l'actuel contrôleur de session de l'objet avec l' {{controller.session.sessionHash}}
dans chaque itinéraire que nous sommes, c'est le mérite de ce que nous avons fait en vous inscrivant et d'injecter de l' App.Session
objet dans chaque contrôleur de l'application.
Espérons que cela aide.
Un cas d'utilisation courant consiste à fournir aux contrôleurs et aux routes la propriété utilisateur actuellement connectée, comme indiqué dans https://github.com/kelonye/ember-user/blob/master/lib/index.js et https://github.com/. kelonye / utilisateur-membre / blob / master / test / index.js
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.