Использование 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() перезагрузит его снова.

Другие вопросы по тегам