5

デフォルトでは、Emberは子リソース{{outlet}}のビューを親リソースのビューによって定義されたものに挿入します。それをオーバーライドするにはどうすればよいですか?つまり{{outlet}}、アプリケーションビューで定義された子ビューを挿入します。なぜこれがデフォルトなのですか?

ユースケース:usersリソースがあり、そのnew中にルートがあります。親リソースではなくnew、アプリケーションに表示したい。{{outlet}}{{outlet}}

App.Router.map(function(){
  this.resource('users', function(){
     this.route('new');
  });
});
4

1 に答える 1

14

ルートごとに、renderTemplateオーバーロードできるメソッドがあります。これにより、ビューのレンダリングを完全に制御できます。

たとえば{{outlet}}、ビューがレンダリングされる場所を次のように指定できますinto

(これはあなたのユースケースだと思いますが、今日は少しぼんやりしています。)

var UsersRoute = Ember.Route.extend({
    renderTemplate: function() {
        this.render('users', {
            // Render the UsersView into the outlet found in application.hbs
            into: 'application'
        });
    }
});

outletプロパティを使用してレンダリングするアウトレットから名前を指定することもできます。

var UsersRoute = Ember.Route.extend({
    renderTemplate: function() {
        this.render('users', {
            // Render the UsersView into the outlet named "sidebar"
            outlet: 'sidebar'
        });
    }
});

そしてもちろん、両方の組み合わせを使用して、アウトレットの名前と、プロパティを使用してそのアウトレットが見つかった場所の両方を指定できintoます。

于 2013-01-31T13:06:01.640 に答える