在Emberjs创建后转到新项目路线

时间:2016-07-04 20:56:27

标签: ember.js ember-data ember-cli

我的路线中有这样的事情:

actions: {
  save(title, description) {
    const newCard = this.get('store').createRecord('card', { title, description } );
    newCard.save().then((card) => {
      // card.id contains the id of the new card
      this.transitionTo('cards.all'); // problem with this line
    });
  }
}

创建后我想转到新的卡片路线。我可以从id获取新项目的card.id。我尝试过以下但没有用:

this.transitionTo('cards.card', card.id);

这引发了一些错误,因为cards.card路线无法在参数中找到id

以下内容:

this.transitionTo('cards/' + card.id);

抛出一些错误,指出找不到cards/45路由,但是如果新项目已创建,我可以导航到它。

我使用的是Ember 2.6.1。

修改

我的router.js文件:

this.route('cards', function() {
  this.route('all');
  this.route('card', {path: '/:card_id'}, function() {
    this.route('edit');
  });
  this.route('new');
});

2 个答案:

答案 0 :(得分:1)

这是您的路由器目前的样子吗?

this.route('cards', function() {
    this.route('all');
    this.route('card', {path: '/:card_id'}, function() {
    this.route('edit');
  });
  this.route('new');
});

如果您想要转到特定卡的新路线,那么您需要为新定义一个slug。像

这样的东西
this.route('new', {path: /:card_id});

动作哈希的转换如下:

this.transitionTo('new', card.id);

希望我能正确理解您的用例。

答案 1 :(得分:0)

应该是这样的:

this.transitionTo('cards.card', card);

我只需要这样做,因为我的card.js期待params对象并且我试图传递一个数字:

model(params) {
  return this.store.find('card', params.id);
}