4

次のルートが定義されています。

SettingsApp.Router.map(function () {
    ....
    this.resource('profile', function () {
        this.route('user'),
        this.route('company')
    });

});

SettingsApp.ProfileRoute = Ember.Route.extend({
    redirect: function () {
        this.transitionTo('profile.user');
    },
    model: function () {
        return Ember.A([
            Ember.Object.create({title:"User", link:"#/profile/user"}),
            Ember.Object.create({title:"Company", link:"#/profile/company"})
        ]);
    }
})

#/profile#/profile/userは予想どおり にリダイレクトされます、問題は に#/profile/companyリダイレクトされること#/profile/userです。そのリソースの下の URL にアクセスするたびに、リソースのリダイレクトが行われるようです。

どうしてこれなの?トップレベルのみをリダイレクトするにはどうすればよい#/profileですか?

4

2 に答える 2

3

redirect()profileリソースのindexルートに移動できます。これにより、参照してアクセスを許可しProfileIndexRouteた場合にのみトリガーされ、問題は発生しません。#/profile#/profile/user#/profile/company

SettingsApp.Router.map(function () {
    this.resource('profile', function () {
        this.route('user');
        this.route('company');
    });

});

SettingsApp.ProfileRoute = Ember.Route.extend({
    //redirect: function () {
    //    this.transitionTo('profile.user');
    //},
    model: function () {
        return Ember.A([
            Ember.Object.create({title:"User", link:"#/profile/user"}),
            Ember.Object.create({title:"Company", link:"#/profile/company"})
        ]);
    }
});


SettingsApp.ProfileIndexRoute = Ember.Route.extend({
  redirect: function () {
        this.transitionTo('profile.user');
    },
});

JSBin の例

ヒント:ルーターを介してアクセスされているルートを表示するように設定LOG_TRANSITIONS: trueします。Applicationこれは、このような問題のデバッグに非常に役立ちます。

SettingsApp = Ember.Application.create({
  LOG_TRANSITIONS: true
});
于 2013-06-20T17:33:33.770 に答える