-
-
Save ivanvanderbyl/4560416 to your computer and use it in GitHub Desktop.
App.AccountEditRoute = Ember.Route.extend({ | |
setupController: function(controller) { | |
controller.set('content', this.get('currentUser')); | |
} | |
}); |
%noscript | |
.container | |
.alert | |
%strong | |
Javascript is disabled! | |
The AppName UI is built entirely in Javascript, as such you need to enable | |
Javascript in your browser to continue. | |
:javascript | |
var currentUser = jQuery.parseJSON('#{current_user_json}'); |
Ember.Application.initializer({ | |
name: "currentUser", | |
initialize: function(container, application) { | |
var store = container.lookup('store:main'); | |
var obj = store.load(CrashLog.User, currentUser); | |
container.optionsForType('user', { instantiate: false, singleton: true }); | |
container.register('user', 'current', CrashLog.User.find(obj.id)); | |
} | |
}); | |
Ember.Application.initializer({ | |
name: "injectCurrentUser", | |
after: 'currentUser', | |
initialize: function(container) { | |
container.injection('controller:application', 'currentUser', 'user:current'); | |
container.typeInjection('route', 'currentUser', 'user:current'); | |
} | |
}); |
@conrad-vanl & @ivanvanderbyl Would love to know if you guys got around the content is undefined error?
@rlivsey solves it in his pusher example by reopening the ControllerMixing and setting the value to null...
Ember.ControllerMixin.reopen({
pusher: null
});
See: http://livsey.org/blog/2013/02/10/integrating-pusher-with-ember/
How did you guys get around this?
Looks like that issue is fixed in master
FYI @AlexanderZaytsev I couldn't get this working as the $('meta[name="current-user"]').attr('content') dom element was not yet loaded. I finally got it working by adding a ready block
Ember.Application.initializer
name: 'currentUser'
initialize: (container) ->
$ ->
store = container.lookup('store:main')
attributes = $('meta[name="current-user"]').attr('content')
console.log attributes
if attributes
object = store.load(App.User, JSON.parse(attributes))
user = App.User.find(object.id)
controller = container.lookup('controller:currentUser').set('content', user)
container.typeInjection('controller', 'currentUser', 'controller:currentUser')
@boy-yer your Approach #2 looks interesting, but where is the current_permission
method you are delegating the can_update
etc. to in the ApplicationController
? and why do you pass an array with these values to the serializer? Something I'm not getting here... please advice. Thanks!
I'm trying to collect various Auth solutions in a new gem ember-beercan https://github.com/kristianmandrup/ember-beercan
I couldn't get it to work, I kept returning Guest in my template view.
@amaanr @AlexanderZaytsev Perhaps hooking into the deferReadiness
and advanceReadiness
methods is necessary?
Ember.Application.initializer
name: 'currentUser'
initialize: (container) ->
App.deferReadiness()
$ ->
store = container.lookup('store:main')
attributes = $('meta[name="current-user"]').attr('content')
console.log attributes
if attributes
object = store.load(App.User, JSON.parse(attributes))
user = App.User.find(object.id)
controller = container.lookup('controller:currentUser').set('content', user)
container.typeInjection('controller', 'currentUser', 'controller:currentUser')
App.advanceReadiness();
This might not work at all... I just learned about the Readiness methods a few minutes ago. :P
@AlexanderZaytsev Thanks for that article, it helped a ton
Is there a non-private alternative to typeInjection
?
@amaanr @AlexanderZaytsev I use the readiness calls that @listrophy suggests.
Remember to tell currentUser Initializer to fire up after loading store, otherwise store will be undefined
Ember.Application.initializer({
name: 'currentUser',
after: 'store',
@ivanvanderbyl did you ever figure out the issue with not having a content property set when you do a typeInjection with a controller? I believe I'm running in to the same issue.
Example...doing something like this:
Results in this chrome error:
Interestingly enough...its that
OtherController
's content is undefined that's causing the error, I think. I've noticed if I simply add a blankcurrentUser
property toOtherController
then it works as well.I assume there's not really a way to run typeInjection somewhere else and at a later time (then in an initializer)?