3

Emberjs コアには、Ember.StateManager を拡張する新しいルーター実装があります。これは私が現在実装している基本的なルーターです (coffeescript を使用):

Emee.set "stateManager", Ember.Router.create
    location: "hash"
    enableLogging: true

    start: Ember.State.extend
        index: Ember.State.extend
            route: "/"
            connectOutlets: (manager) ->
                console.log(manager)

        tasks: Ember.State.extend
            route: "/tasks"

            index: Ember.State.extend
                route: "/"

            show: Ember.State.extend
                route: "/show"

        users: Ember.State.extend
            route: "/users"

            index: Ember.State.extend
                route: "/"

Emee は私の Ember 名前空間です。いくつか質問があります。

1) ページがハッシュ付きの URL で読み込まれるとhttp://localhost:3000/#tasks、正しい start.tasks.index 状態に移動しますが、hashChange では、現在の状態の routePath にメッセージを送信するだけです。Emee.stateManager.route("/tasks") も同じことを行います。状態を変更せず、現在の状態の routePath にメッセージを送信します。自分で routePath を実装する必要がありますか? そうでない場合、ルートを提供して状態を変更するにはどうすればよいでしょうか?

2)状態に入ったときにどの関数が呼び出されるかについて、多くの変更が見られます。現在、「connectOutlets」は、状態に入ったときに呼び出される関数の名前のようです。これは、コントローラーをセットアップするための正しいページですか?

アップデート

ember コードを最新リビジョンに更新しました。私のルーターは次のようになります。

Emee.Router = Ember.Router.extend
    location: "hash"
    enableLogging: true

    root: Ember.State.extend
        index: Ember.State.extend
            route: "/"
            redirectsTo: 'tasks.index'

        tasks: Ember.State.extend
            route: "/tasks"

            index: Ember.State.extend
                route: "/"
                connectOutlets: (manager) ->
                    console.log("in index");

            show: Ember.State.extend
                route: "/show"
                connectOutlets: (manager) ->
                    console.log("in show");

        users: Ember.State.extend
            route: "/users"

            index: Ember.State.extend
                route: "/"

Emee.initialize()

ブラウザの進むボタンと戻るボタンはまだ機能しません。routePathそれらはすべてリーフノードであるため、返されるだけを呼び出します。何か小さなものが欠けていると思いますが、指を置くことができませんでした。

4

2 に答える 2

2

最後にそれを釘付けにしました:)0.9.8.1の時点で、https://github.com/emberjs/ember.js/issues/887#issuecomment-5946213によって提供される回避策を微調整する必要があります。次のように修正し、Ember.Locationオブジェクトの作成中に「実装」を「スタイル」に変更します。

Ember.Application.reopen({
  setupStateManager: function(stateManager) {
    var location = Ember.get(stateManager, 'location');

    if (typeof location === 'string') {
      location = Ember.Location.create({style: location});
      Ember.set(stateManager, 'location', location);
    }

    stateManager.route(location.getURL());
    location.onUpdateURL(function(url) {
      stateManager.transitionTo('root');
      stateManager.route(url);
    });
  }

});
于 2012-06-08T11:21:54.367 に答える