2013-08-18 4 views
1

У меня есть вложенная структура маршрутов, как это:Вложенных маршруты загружают родительскую модель

App.Router.map(function() { 
    this.resource('user', {path: '/user/:user_id'}, function() { 
    this.route('followers', {path: '/followers'}); 
    }); 
}); 

, когда я ударил user/123/followers маршрут я бы ожидать, что он автоматически загрузит модель из user/123/followers, но он просто выбирает модель пользователя от user/123. Что мне нужно добавить, чтобы он извлекал нужные данные для маршрута?

ответ

2

Каждый маршрут имеет свою собственную модель, и это не propaged, по умолчанию.

Так App.UserRoute модель, возвращает текущую модель, как ожидается:

App.User.find(params.user_id) 

Но поскольку App.UserFollowersRoute имеют свою собственную модель крючка, то вы должны при условии его. Вы можете сделать это легко, используя modelFor.

App.UserFollowersRoute = Ember.Route.extend({ 
    model: function() { 
    return this.modelFor('user'); 
    } 
}); 

МодельНайдите модель по именованному маршруту. Таким образом, modelFor('user'), извлечет модель из App.UserRoute.

И в вашем user/followers шаблоне, вы будете иметь текущего пользователя, в текущем контексте:

<script type="text/x-handlebars" data-template-name="user/followers">   
    <h2>{{name}} followers:</h2> 
    <ul> 
    {{#each followers}} 
     <li>{{name}}</li> 
    {{/each}} 
    </ul> 
</script> 

Here a sample with this working

0

Ember будет автоматически называть User.find (123), когда вы нажмете /user/123/..., потому что это крючок модели по умолчанию для App.UserRoute. Если вы хотите получать дополнительные данные, когда маршрут Последователи доступа к ним, определить модель крюк для App.UserFollowersRoute:

App.UserFollowersRoute = Ember.Route.extend({ 
    model: function() { 
    user = this.controllerFor('user'); 
    // Now find and return the list of followers 
    } 
}); 
Смежные вопросы