Как один доступ значение обеспечивается модель крючок маршрута внутри основного шаблона
По умолчанию внутри setupController
крюка маршрута, Эмбер будет set the property model
on your controller к разрешенной стоимости обещания возвращается от крюка маршрута model
.
Значение вы можете просто использовать свойство model
в шаблоне для доступа model.navigation
:
<nav>
{{#each model.navigation as |navItem|}}
<li>{{#link-to navItem.link}} {{navItem.title}} {{/link-to}}</li>
{{/each}}
</nav>
Если вы хотите использовать другое имя, вы можете переопределить setupController
крюк и установить имя себя:
export default Ember.Route.extend({
// ...
setupController(controller, model) {
this.set('navigation', Ember.get(model, 'navigation'));
}
// ... rest of the code
})
Значит, вы можете использовать navigation
вместо model.navigation
внутри шаблона. Другой способ мог бы добавить alias внутри контроллера для model
собственности:
export default Ember.Controller.extend({
navigation: Ember.computed.alias('model.navigation')
// ... rest of the code
})
, который позволит вам, а также использовать navigation
вместо model.navigation
.
Однако, если вы хотите иметь какую-то глобальную навигацию в своем приложении, лучшим способом было бы использовать Service
, который вы вводите в любой контроллер, который нуждается в навигации. Что-то вроде:
// app/services/navigation.js
export default Ember.Service.extend({
items: null,
init() {
this._super(...arguments);
this.set('items', [{
title: "Projects",
link: "projects"
}, {
title: "My Specifications",
link: "specs"
}]);
}
});
А затем вводят его в контроллерах:
export default Ember.Controller.extend({
navigation: Ember.service.inject()
});
И теперь у вас есть доступ к навигации в шаблоне этого контроллера, а также.
Прежде всего, вы должны указать моделирование данных с помощью {{#each model.navigation ...}} в шаблоне. Во-вторых, каждый маршрут соответствует его шаблону. В вашем случае вам нужен маршрут приложения для отображения данных из модели в приложении hbs. –
Это именно то, чего меня не интересует, @kristjan. У меня есть (очень распространенная) ситуация, когда мне нужен обычный маршрут для предоставления данных, которые должны быть доступны внутри родительского шаблона (application.hbs). Например, список активной навигации. – Slavic
@Slavic Каждый шаблон, имеющий свой собственный маршрут, является обычным способом. Консолидация конфигурации, но если вы хотите отобразить навигационную модель в своем маршруте приложения, почему бы не возвратить несколько моделей для вашего маршрута приложения? – Craicerjack