How to redirect to a nested dynamic segments in EMberjs

我的梦境 提交于 2019-12-11 04:40:30

问题


If we have several books,each books contains several chapters and each chapter contains several pages.

In an App, when user navigate to

"/home"

list all the books,clicking a book(eg:book_1) will directly "linkTo"

"/book_1/chapter_1/page_1"

show the content of "chapter_1/page_1" within the selected book.

I am now trying to use the "redirect" hook,but I am confused with these:

1,How to sent muti params to a redirect hook;

2,How to update the URL correctly after redirecting?

3,What is the "Ember way" to do this?

_BOOK MODEL__

App.Book = DS.Model.extend({
name: DS.attr('string'),
chapters: DS.hasMany('chapter',{async:true}),
color: DS.attr('')
});

App.Chapter = DS.Model.extend({
name: DS.attr('string'),
author: DS.attr(''),
pages: DS.hasMany('page',{async:true})

});

App.Page = DS.Model.extend({
name: DS.attr('string'),
});
App.Book.FIXTURES = [
{
id: 1,
name: 'book1',
color: 'red',
chapters: [1,2]
},
{
id: 2,
name: 'book2',
color: 'blue',
chapters: [3,4]
}
];



App.Chapter.FIXTURES = [
{
id: 1,
name: 'Chapter1',
author: 'jhon',
pages:[1,2]
},
{
id: 2,
name: 'Chapter2',
author: 'jhon',
pages:[3,4]
},
{
id: 3,
name: 'Chapter3',
author: 'peter',
pages:[5,6]
},
{
id: 4,
name: 'Chapter4',
author: 'tom',
pages:[7,8]
}
];

App.Page.FIXTURES = [
{
id: 1,
name: 'page1',
},
{
id: 2,
name: 'page2',
},
{
id: 3,
name: 'page3',
},
{
id: 4,
name: 'page4',
},
{
id: 5,
name: 'page5',
},
{
id: 6,
name: 'page6',
},
{
id: 7,
name: 'page7',
},
{
id: 8,
name: 'page8',
}
]; 

回答1:


redirect is deprecated, use the afterModel hook. I'm sending in ids of 1 and 1 to the chapter and page route, which should hit their model hooks. How is your data separated, does the book model have all the necessary info?

http://emberjs.jsbin.com/uDiLIkij/6/edit

afterModel: function(model, transition){
    console.log(transition.targetName); 
    if(transition.targetName=='book.index'){
      var self = this;
      model.get('chapters').then(function(chs){
        var ch = chs.get('firstObject');
        ch.get('pages').then(function(pages){
          var page = pages.get('firstObject');  
          self.transitionTo('page', model, ch, page);
        });
      });
      transition.abort();
    }      
},


来源:https://stackoverflow.com/questions/20508979/how-to-redirect-to-a-nested-dynamic-segments-in-emberjs

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!