2013-11-26 6 views
5

Я работаю над мобильным приложением на основе ember.js (версия 1.2), и я пытаюсь найти самый идиоматический способ реализации шаблона переключения между глобальным меню, который распространена во многих мобильных приложениях. В частности, это кнопка, расположенная с левой стороны панели инструментов с фиксированным верхом, которая переключает основное меню скрытого ящика, когда пользователь находится в домашнем/индексном представлении приложения, однако при переходе на под-маршрут кнопка отображает обратную стрелка, и при нажатии на нее пользователь возвращается к ранее просматриваемому маршруту (или обратно к указательному маршруту, если нет предыдущих состояний истории, то есть, если пользователь пришел на подпрограмму непосредственно после загрузки приложения).Реализация «условной» кнопки назад в ember.js

Fyi, в настоящее время у меня есть приложение, структурированное с помощью панели инструментов с фиксированным верхом и кнопки переключения/возврата в главном шаблоне приложения. В идеале эта функциональность будет работать независимо от того, как переходят маршруты, через transitionTo() или {{#link-to}} помощников и т. Д.

Так что я хочу знать, поддерживает ли Ember любой вид доступной истории/журнала того, какие маршруты были перенесены на протяжении всего срока действия приложения, а также то, что было бы лучшим способом условно изменить действие, которое кнопка переключения/возврата и ее отображение (ака значок) в зависимости от текущего маршрута. И/или есть способ прослушать события изменения маршрута ember, чтобы я мог сам реализовать эту историю, если понадобится?

ответ

11

Ненавижу быть носителем плохих новостей, но я также ненавижу оставлять вас висящими.

Ember не отслеживает историю, для этого нет общего варианта использования (особенно, поскольку браузер отслеживает это для вас).

К счастью, вы можете отслеживать изменения маршрута в контроллере приложений, что-то вроде этого должно начать вас (обратите внимание, что я не тратил время на разработку потрясающего решения, которое отлично работает, просто показал вам основы, которые вам нужны для этого, я будете препятствовать вам выяснить рабочий процесс, который хорошо работает для вас)

http://emberjs.jsbin.com/IZAZemEP/1/edit

App.ApplicationController = Em.Controller.extend({ 
    history: [], 

    hasHistory: function(){ 
    return this.get('history.length')>1; 
    }.property('history.length'), 

    watchHistory: function(){ 
    this.get('history').pushObject(this.get('currentPath')); 
    }.observes('currentPath'), 

    actions: { 
    goBack: function(){ 
     // implement your own history popping that actually works ;) 
     if(this.get('hasHistory')){ 
     this.get('history').popObject(); 
     window.history.back(); 
     this.get('history').popObject(); // get rid of route change here, don't need it 
     } 
    } 
    } 
}); 
+0

Да, я был уверен, что уголек не было ничего подобного, что встроенные, так как я не мог найти упоминать об этом где-нибудь в руководствах или документах API, но просто хотел убедиться, прежде чем я продвинулся вперед с реализацией чего-то для него m yself. Ваш пример должен быть идеальной отправной точкой для этого, спасибо очень! –

+4

В действии goBack я бы добавил if (!! this.get ('hasHistory')) {} else {// transitionTo index}, чтобы избежать того, чтобы кто-то из приложения – ndreckshage

Смежные вопросы