Использование emberjs new-router-V3 и #with helper для доступа к событиям, определенным в другом маршруте
У меня есть этот рабочий jsfiddle. EmBlog.PostsEditRoute имеет событие destroyPost, которое я хочу вызвать с помощью помощника действий в post/show.hbs, который является шаблоном для EmBlog.PostsShowRoute.
Я использую #with помощник, чтобы изменить область в шаблоне, как предложено здесь. Это не разрушает объект и не выдает ошибку.
<script type="text/x-handlebars" data-template-name="posts/show">
{{#with EmBlog.PostsEditController}}
<a href='#' {{action destroyPost this}}> Destroy</a>
{{/with}}
</script>
EmBlog.PostsShowRoute = Ember.Route.extend({
});
EmBlog.PostsEditRoute = Ember.Route.extend({
events: {
destroyPost: function(context) {
var post = context.get('content');
post.deleteRecord();
post.get('store').commit();
this.transitionTo('posts');
}
}
});
1 ответ
Я думаю, что это в основном потому, что вы должны определить свой обработчик событий в EmBlog.PostsShowRoute
или в PostsRoute, если вы хотите, чтобы он был доступен в другом представлении PostsXXX. см. http://emberjs.com/guides/templates/actions/ для деталей.
(здесь, кстати, использование #with помощника кажется неправильным, поскольку ваша ссылка о чем-то довольно старом). Я бы просто сделал
<script type="text/x-handlebars" data-template-name="posts/show">
<a {{action destroyPost content}}> Destroy</a>
</script>
Вот модифицированная скрипка: http://jsfiddle.net/Qn3ry/4/
Обратите внимание, что когда вы пытаетесь уничтожить сообщение, находящееся в фикстурах, оно появляется снова при переходе к публикациям / индексу. Это просто потому, что сообщение не уничтожено в приборах, и при входе в PostIndexRoute App.Post.find() перезагрузит его снова.