RenderTemplate в розетку не работает

У меня есть шаблоны box/inbox.hbs и users/profile.hbs с {{outlet inbox}} в profile.hbs

В моем profile.hbs меня есть {{#link-to 'box.inbox'}}this is a link{{/link-to}} которая должна отображать box/inbox.hbs в выход {{outlet inbox}} который Я пытаюсь сделать в моем router.js с:

Router.BoxInboxRoute = Ember.Route.extend({
 renderTemplate: function(){
 this.render('box.inbox', {into: 'users.profile', outlet: 'inbox'});
 }
});

но ссылка просто перенаправляет меня на другую страницу /box/inbox. Как получить его так, чтобы inbox.hbs отображался в розетке на profile.hbs?

1 ответ

Я думаю, что link-to помощником является источником путаницы. Насколько мне известно, link-to всегда будет изменять URL-адрес и маршрут, поэтому вы никогда не сможете добиться рендеринга маршрута box.inbox в определенную часть шаблона users.profile, щелкнув ссылку, если вы не используете вложенные маршруты,

Однако, чтобы достичь чего-то вроде нажатия на ссылку, чтобы отобразить содержимое входящих сообщений, вы всегда можете загрузить маршрут box.inbox скрытый с помощью именованной розетки, а затем щелкнуть по ссылке, показать div, содержащий содержимое box.inbox. Вот пример.

UsersProfileRoute:

Router.UsersProfileRoute = Ember.Route.extend({
 renderTemplate: function(){
 this.render();
 this.render('box.inbox', {into: 'users.profile', outlet: 'inbox'});
 }
});

пользователи /profile.hbs:

<a href="#" {{action="" 'showinboxaction'}}="" target="_blank">click to see inbox</a>
<div {{bind-attr="" }}="">
 {{outlet inbox}}
</div>

CSS:

.inbox-style.displayed {
 display: block;
}
.inbox-style.hidden {
 display: none;
}

и в контроллере профиля пользователя есть действие:

action: 
{
 showInboxAction: function()
 {
 this.set('shouldShowInbox', true);
 }
}

licensed under cc by-sa 3.0 with attribution.