Это один из способов сделать это, хотя я думаю, что это немного ужасно и, возможно, даже опасно долгое время, поскольку он использует функции Javascript, а не API Ember. Мы начинаем с получения маршрутов через ваш объект «App». Вы можете получить список всех классов, которые он содержит, с помощью Object.keys (App). Затем вы можете пройти через каждый из них, проверить, является ли это маршрут с .superclass, который будет Ember.Route, если это маршрут. Затем вы можете проверить свойство showOnIndex на прототипе каждого из них.
var allRoutes = [];
Object.keys(App).forEach(function(key, index, allKeys) {
if (App[key].superclass === Ember.Route && App[key].prototype.showOnIndex === true) {
allRoutes.push(App[key]);
}
});
Теперь у нас есть массив всех имен классов маршрутов, которые имеют showOnIndex истины.
Однако у вас все еще есть проблема выравнивания имен из распознавателя с именами классов Route, но поскольку путь Ember заключается в том, что маршрут, такой как my/url, будет отображаться в MyUrlIndexRoute и 'my.url.index' и т. д., тогда вы можете разделить маршрут по верхнему регистру, удалить последнюю часть («Маршрут»), объединить их и преобразовать все в нижний регистр.
var routesByName = [];
allRoutes.forEach(function(name, index, all) {
var names = name.match(/[A-Z][a-z]+/g);
names.pop();
var routeName = names.join('.').toLowerCase();
routesByName.push(routeName);
});
Тогда вы можете просто цикл через routesByName в шаблоне и создать {{#link-to}}
для каждого из них.
Я думаю, что лучший способ достичь того, что вы хотите, это сохранить карту всех маршрутов до их значения showOnIndex отдельно от вашего приложения и просто обновить его для каждого нового, которое вы хотите добавить. Это может быть более безопасным в долгосрочной перспективе, поскольку кто знает, как внутреннее состояние Ember изменится в будущем, что может помешать выполнению некоторых вещей выше.
Обратите внимание, что я проверил все это в режиме отладчика в приложении Ember в Chrome, но не запустил все фрагменты кода, поэтому извиняюсь за любые ошибки.
Вы попробовали firefox или chrome tab-plugin для emberjs? рекламируется, что он может показывать маршруты? https://github.com/emberjs/ember-inspector – Blauharley
Да, я использую это, но как это должно помочь? – aquavitae