2013-03-27 3 views
4

Теперь я обрабатываю логин/регистрацию пользователя без ember, но я хотел бы обрабатывать профиль пользователя в ember (редактировать профиль). Какой был бы лучший способ действий, чтобы иметь одноэлементную модель, которая будет обрабатывать текущего пользователя? Я определил простой пользователь, как:Модель Singleton для зарегистрированного пользователя

App.User = DS.Model.extend({ 
    email: DS.attr('string'), 
    name: DS.attr('string'), 
}); 

я мог заселить его в App.ready, но я не совсем уверен, как сделать это с чем-нибудь другим, чем App.User.find(id) - и я не знаю, идентификатор. Мой сервер может вернуть только текущего пользователя в этом сеансе, но как использовать его в этом случае? Или я обрабатываю это неправильно?

Благодаря

ответ

4

Discourse встраивает информацию текущего пользователя на страницу HTML базы и предварительные нагрузки его в User модели в маршруте приложения:

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/routes/application_route.js

Затем User модель имеет достаточно информации для доступа профиль пользователей/и т. д .:

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/models/user.js

Сеанс конкретные элементы (такие, как выходить из системы) доступ к отдельным /session/ URL:

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse.js#L169

Если вы используете сессии, и вы хотите, чтобы избежать внедрения текущей пользовательской информации в вашей HTML странице базы (если вы статически ставите контент и т. д.), вы также можете вручную получить доступ к URL-адресу, специфичному для сеанса (например, /session/), который возвращает текущую информацию пользователя в соответствии с текущим сеансом.

4

Я в основном делаю то, что вы описываете. Я использую приведенный ниже код, чтобы позвонить в бэкэнд, чтобы получить зарегистрированного пользователя и установить его в приложении Ember.

var App = Ember.Application.create({ 
    LOG_TRANSITIONS: true, 
}); 

App.deferReadiness(); 

$.ajax({ 
    url: 'http://localhost:3000/login', 
    dataType: 'json', 
    success: function (resp) { 
     console.log(resp.user); 

     App.store.load(App.User, resp.user._id, resp.user); 
     App.store.load(App.Company, resp.company._id, resp.company); 

     var user = App.User.find(resp.user._id); 
     var company = App.Company.find(resp.company._id); 

     App.CurrentUserController.reopen({ 
      content: user 
     }); 

     App.CurrentCompanyController.reopen({ 
      content: company 
     }); 

     App.advanceReadiness(); 
    }, 
    error: function (resp) { 
     console.log('failed: ' + resp); 
     App.advanceReadiness(); 
    } 
}); 

App.initialize(); 
+1

Каким будет текущий способ сделать то же самое в новом Ember? Потому что он говорит, что load() не определен.? –

Смежные вопросы