8

Ember.js の状態がルート マネージャーでのみ定義されるように設計/想定されているかどうか、およびルートが Ember に不可欠であるかどうかを理解しようとしています。私が見たほとんどすべてのガイドは、州とルートが正確に一致することを前提としているようです。

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

myEmailClient.com#composingMessage_userHasSpecifiedRecipient_userIs...

これの例はありますか?

2 番目の質問: ルートに結合された状態と結合されていない状態を混在させることはできますか?

最後に、並行状態のようなものが必要な場合は、 Ember のsproutcore-statechartアドオンを使用することを推奨するアドバイスを見ました。これはまだ本当ですか?

4

2 に答える 2

4

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

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

生活を楽にし、ボイラープレート コードを避けるためにRouter、EmberJS の最新バージョンに実装があります。これはまだ進行中の作業であり、週に 1 ~ 2 回更新されます。GitHub ダウンロードで最新のものを見つけることができます。

Ember.RouterEmber.StateManagerURL ベースのアプリケーション状態検出の提供を担当するのサブクラスです。アプリケーションのEmber.Routerインスタンスは、アプリケーションの読み込み時にブラウザの URL を検出し、それを特定のアプリケーションの状態に一致させようとします。さらに、ルーターは URL を更新して、時間の経過に伴うアプリケーションの状態の変化を反映します。( EmberソースのJSDoc )

さらに、Ember.RouterextendsEmber.StateManagerEmber.RouteextendsであるためEmber.State、これらは交換可能です。実際、状態とルートの混合をサポートするために、1 日だけ多くのサポートが行われました。ルート内の基本的な状態のサポートを参照してください。

于 2012-06-28T00:03:49.763 に答える
2

ルーターのロケーションの実装を「なし」に変更して、この機能を無効にすることができます。他の方法は「ハッシュ」または「履歴」です (現在の ember-latest.js は github にあります)。

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

App.Router = Ember.Router.extend({
    location : Ember.Location.create({
        implementation : 'none'
    })
});
于 2012-06-25T18:47:29.820 に答える