2014-10-10 2 views
0

Я хочу показать пользовательский профиль пользователя после входа в систему. Поэтому я решил, что сделаю Application.Controller ObjectController и установил его свойство модели для пользовательского объекта. Проблема, с которой я столкнулся сейчас, заключается в том, что я не знаю, как показать свойства пользователя в шаблоне вложенного профиля? Я действительно видел другие ответы на SO, используя {{#each todo в App.todosController.content}}. но это работает только для ArrayController. Возможно, это возможно только с ArrayController, я действительно не знаю, но это было бы странно. Спасибо за любую помощь!Показать модель ApplicationController во вложенном шаблоне в Ember

Чтобы проверить это, я устанавливаю модель Application.Controller для объекта-пользователя при успешном входе в систему. Вот мой код:

<script type="text/x-handlebars" id="profile"> 
     <div class="content"> 
      <div class="content-padded"> 
       <div> 
        <p><h3>Username: {{{user.username}}}</h3><p> 
        <p>trials: {{user.trials}}</p> 
        <p>results: {{user.results}}</p> 
        <p>email: {{user.email}}</p> 
       </div> 
      </div> 
     </div> 
</script> 

App.Router.map(function() { 
this.resource('signup'); 
this.resource('login'); 
this.resource('profile'); 
this.resource('practice'); 
this.resource('overview'); 
}); 

App.LoginController = Ember.ObjectController.extend({ 
    model: {}, 
    needs: ['application'], 
    loggedInUser: {id: 9, 
    username: "rooty", 
    trials: "fghsds", 
    results: "fdfsd", 
    email: "[email protected]"}, 
    loginHandler: function(data) { 
     // sign in logic 
     this.set("controllers.application.isLoggedIn", true); 
     this.set("controllers.application.model", loggedInUser); 
    } 
}); 

App.ApplicationController = Ember.ObjectController.extend({ 
    isLoggedIn: false 
}); 

Пользовательский объект выглядит следующим образом:

User {id: 9, 
     username: "rooty", 
     trials: "fghsds", 
     results: "fdfsd", 
     email: "[email protected]"} 

ответ

0

Ты так близко! Таким образом, ваш контроллер входа устанавливает модель на контроллере приложения. Свойство контроллера вашего входа в контроллер needs означает, что все свойства в области контроллера приложения будут доступны для вашего контроллера входа. Следуя этой логике, не мог ваш профильный контроллер также needs: ['application']?

С небольшой работы, мы можем назвать обратиться к пользователям, как вы хотите от вашего профиля контроллера:

needs: ['application'], 
users: Ember.computed.alias('controllers.application.model') 

Затем в шаблоне профиля, что вы уже должны работать:

<div> 
    <p><h3>Username: {{{user.username}}}</h3><p> 
    <p>trials: {{user.trials}}</p> 
    <p>results: {{user.results}}</p> 
    <p>email: {{user.email}}</p> 
</div> 

JSBin

Обратите внимание, что в контроллере индекса JSBin у меня есть вычисленный псевдоним для модели приложений. Значение входного помощника в шаблоне индекса связано с этим вычисленным псевдонимом, например, с моделью приложения. Соблюдайте в шаблоне приложения, что я использую только {{model}}. Когда вы вводите ввод, вы видите изменение модели благодаря мощному привязке Ember, поэтому мы определенно нацелили модель приложения с помощью needs и вычисленного псевдонима.

То же самое с шаблоном профиля.

+0

Tanx sunrize920! Это работало как шарм. Потребности: ['application'] Я выяснил сам по себе, однако это использование Ember.computed.alias ('controllers.application.model') является новым для меня .. Я, очевидно, не в полной мере использовал их функциональности. Поэтому я очень рад узнать все это! – sunchild

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