web-dev-qa-db-ja.com

Ember CLIでリソースとルートを適切に生成する方法

Ember CLIを使用して、このようなリソースとルートを定義しようとしています。

    this.resource('events', function() {
        this.route('view', { path: "/:id"})
    });

私がこれを試した場合:ember g resource events/view私はこれを得ます:

this.resource('events/view', { path: 'events/views/:events/view_id' });

私がこれを試した場合:ember g resource eventsおよび:ember g resource events/view

this.resource('events', { path: 'events/:events_id' });
this.resource('events/view', { path: 'events/views/:events/view_id' });

私がこれを試した場合:ember g resource eventsおよび:ember g route events/view

this.resource('events', { path: 'events/:events_id' });
this.route('events/view');

これを行う方法はありますか?

17
williamt

現時点では、必要なパターンでネストされたリソースとルートは、Ember CLIにあるデフォルトのブループリントで自動的に生成されません。デフォルトのブループリントは、骨格ファイルとファイル構造を生成し、いくつかの使用法これらのafterInstallフックを使用して他のファイルを更新します。これらのデフォルトのブループリントに従って、これらのアイテムを適切に生成しています。

    ember g resource events
    ember g route events/view

次に、意図した入れ子でrouter.jsのRouter.mapを変更します。

    Router.map(function() {
      this.resource('events', function() {
        this.route('view', { path: "/view/:id" });
      })
    });

これで、ブラウザーで「events/view/1」を押して、探しているルートを Ember Inspector's Routesタブで確認できるはずです。

または、次のコマンドを実行して、カスタムブループリントを生成することもできます。

    ember generate blueprint nested-resource-route

ブループリントディレクトリがプロジェクトルートに作成され、新しいブループリントが中に含まれます。リソースとルートブループリントを基盤として使用して、独自のジェネレーターをロールして、求めているものを実現できます。

19
jacefarm

希望する動作はember-cli 0.1.5以降で可能です。 リリースノート から:

#2748 以前は次のようなルートがあった場合、適切にネストされたルートとリソースをサポートするようにルータージェネレーターを改善しました。

_Router.map(function() {
  this.route("foo");
});
_

そしてあなたは_ember g route foo/bar_を行いました生成されたルートは

_Router.map(function() {
  this.route("foo");
  this.route("foo/bar");
});
_

ネストされたルートを適切に管理し続けるため、結果は次のようになります。

_Router.map(function() {
  this.route("foo", function() {
    this.route("bar");
   }); 
});
_

さらに、オプション_--path_が追加されたので、friendsの下にネストされたルートを作成する_ember g route friends/edit --path=:friend_id/id_のようなことができます:this.route('edit', {path: ':friend_id/edit'})

11
IanVS