2012-06-25 13 views
8

Ember.jsの状態がルートマネージャでのみ定義されていると想定されているか、ルートがEmberにとって不可欠であるかどうかを理解しようとしています。私が見たのは、あなたが州とルートを正確に一致させたいと思っているようです。guidesEmber.jsには経路を使用しないのですか?

ルートに依存しない状態をアプリケーションの状態だけで作成したいと考えています。たとえば、電子メールクライアントでは、状態が「userHasSpecifiedRecipient」になることがあります。この状態がtrueの場合のみ、フォームのメッセージボックスを有効にすることができます。しかし、明らかに私はURLはなりたくない:この例は、

myEmailClient.com#composingMessage_userHasSpecifiedRecipient_userIs...など

ありますか?

第2の質問:経路と状態に結合されていない状態を混在させることはできますか?

最後に、Emberのsproutcore-statechartアドオンを使用することを推奨するアドバイスを見ました。これは本当ですか?

答えて

4
App.Router = Ember.Router.extend({ 
    location : Ember.Location.create({ 
     implementation : 'none' 
    }) 
}); 

Finite State Machineの実装、Ember.StateManagerがあります。 StateManagerはEmber.Stateを使用して、enterexit関数などを持つステートマシンの状態を表します。Class: Ember.StateManagerをご覧ください。

StateManagerを使用する例では、Ember.Viewはそれを使用してViewのさまざまな状態を管理します。もう1つの例はEmber-Dataであり、ステート・マネージャを使用してレコードが持つさまざまな状態を追跡します。

ボイラープレートコードを避けるために、EmberJSの最新バージョンにはRouterが実装されています。これはまだ進行中であり、週に1,2回更新されています。最新の情報はGitHub downloadsです。

Ember.Routerは、URLベースのアプリケーション状態検出の提供を担当するEmber.StateManagerのサブクラスです。アプリケーションのEmber.Routerインスタンスは、アプリケーションの読み込み時にブラウザのURLを検出し、特定のアプリケーション状態に一致させようとします。さらに、ルータはアプリケーションの状態変化を反映するためにURLを更新します。 Ember.RouterEmber.StateManagerEmber.RouteEmber.State延びて延びているので(JSDoc in Ember source

さらに、これらは交換可能です。事実、州と路線の混在をサポートするために、ちょうど1日も多くのサポートが行われました。Support basic States inside of Routesを参照してください。

2

この機能を無効にするには、ルータのロケーション実装を 'none'に変更します。他のメソッドは 'ハッシュ'または 'ヒストリー'(githubの現在のember-latest.js)です。 EmberJSで

https://github.com/joliss/ember.js/blob/50aff86ef5b6847108bc8c32364171815c230d36/packages/ember-application/lib/system/location.js

+1

Ember.Routerの代わりにEmber.StateManagerを使用する、かなり最近の[Yehudaの例](https://gist.github.com/2679013)も見つかりました。後者はドキュメントが使用するものです。それらの違いは何ですか? –

+0

また、上記の私の2番目の質問については、ルートに結合された状態のサブセットをいくつか持たせたいのですが?その場合、私は場所を完全に無効にしたくないでしょう。 (もしこの混合が難しいのであれば、それほど重要ではなく、ルートを他の方法で実装することもできます。) –

+0

ああ、または私はおそらく2つの異なるStateManagersを持っていますか? –

関連する問題