2

Ember Router が Chrome と Safari で URL を更新しないを参考に、最新の ember.js (0.9.8.1) を使用して以下を実装しました。router.transitionTo('route path') メソッド (添付されたスニペットの最後の 3 行) を使用して白黒ルートを切り替えようとすると、ブラウザーの URL が正しく更新されませんが、ビューのマークアップが更新され、状態が変化したことを確認できます。起こる。ここで何かが欠けているかどうかを特定するのに役立つでしょうか?

ところで: Chrome 20.0.1132.27 beta-m でこれをテストしました

App = Ember.Application.create({});

App.IndexView = Ember.View.extend({
    template: Ember.Handlebars.compile(
        'hello world from index'
    )
});

App.ShowView = Ember.View.extend({
    template: Ember.Handlebars.compile(
       'hello world from show'
    )
});

App.Router = Ember.Router.extend({
    location: 'hash',
    enableLogging: true,

    root: Ember.State.extend({
        index: Ember.State.extend({
            route: '/',
            redirectsTo: 'tasks'
        }),

        tasks: Ember.State.extend({
            route: '/tasks',

            index: Ember.ViewState.extend({
                route: '/',
                view: App.IndexView
            }),

            show: Ember.ViewState.extend({
                route: '/show',
                view: App.ShowView
            })
        })
    })
});

var router = App.Router.create({});

App.initialize(router);
router.transitionTo('root');
router.transitionTo('root.tasks');
router.transitionTo('root.tasks.show');
4

2 に答える 2

2

コードを実行したところ、コンソールに「オブジェクト ハッシュにメソッド 'setURL' がありません」というエラーが表示されました。少しデバッグしたところ、ルーターの場所を次のように定義する必要があることがわかりました。

location = Ember.Location.create({ style: 'hash' }) 

また

location = Ember.Location.create({implementation: 'hash'})

正確な理由はわかりませんが、うまくいくようです。おそらく、それはemberバージョンのみによるものです。

于 2012-06-11T09:57:34.857 に答える
0

2つの初期化方法を混同しています。

  1. App.Routerを定義するときは、App.initialize()を呼び出すだけです。Ember.Routerのインスタンスを自動的に作成し、それを変数App.stateManagerに割り当てます。次に、App.stateManagerを使用してtransitionToを呼び出すことができます。

  2. Ember.Routerを拡張するように可変ルーターを定義してから、App.initialize(router)を呼び出すことができます。このメソッドは、Ember.routerのインスタンスも作成し、それをApp.stateManagerに割り当てます。次に、App.stateManagerを使用してtransitionToを呼び出すことができます。

どちらの方法でも機能しますが、私は方法1を好みます。ルートを操作するには、常にApp.stateManagerを使用します。

于 2012-06-08T03:09:52.697 に答える