2013-11-26 10 views
5

ember.js(バージョン1.2)ベースのモバイルアプリケーションで作業しています。グローバルメニューのトグル/バックボタンパターンを実装する最も慣用的な方法を探しています。多くのモバイルアプリでは一般的です具体的には、ユーザーがアプリのホーム/インデックスビューにいるときに非表示のドロワのメインメニューを切り替える固定トップツールバーの左側にあるボタンですが、サブルートに移動すると、矢印をクリックすると、以前に表示されたルートに戻ります(以前の履歴状態がない場合、つまりユーザーがアプリの読み込み時に直接サブルートに入った場合)。ember.jsに「条件付き」戻るボタンを実装する

Fyi、現在私は自分のアプリを、ルートトップアプリケーションテンプレートの固定トップツールバーとメニュートグル/バックボタンで構成しています。理想的には、この機能は、transitionTo()、または{{#link-to}}ヘルパーなど、ルートがどのように移行されていても機能します。

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ドキュメントのどこにでも言及していますが、私が何かを実装する前に確かめたいと思っていました。 yself。あなたの例はこれの完璧な出発点になるはずです、ありがとう! –

+4

goBackアクションで私は追加するだろう(!! this.get( 'hasHistory')){} else {// transitionTo index} – ndreckshage

関連する問題