【问题标题】:How to properly generate resources and routes with Ember CLI如何使用 Ember CLI 正确生成资源和路由
【发布时间】:2014-09-15 14:46:49
【问题描述】:

我正在尝试使用 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');

有没有办法做到这一点?

【问题讨论】:

    标签: ember.js ember-cli


    【解决方案1】:

    目前,您希望的模式中的嵌套资源和路由不会使用 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
    

    将在您的项目根目录中创建一个蓝图目录,其中包含您的新蓝图。使用资源和路线蓝图作为基础,您可以滚动自己的生成器来完成您的目标。

    【讨论】:

    • 感谢您详细说明所有这些内容。我在试图找出资源与路由时遇到了 Ember 101 问题,尤其是在嵌套方面,而这正是我解决问题和理解原始问题所需要的。
    【解决方案2】:

    您想要的行为在 ember-cli 0.1.5 及更高版本中是可能的。来自release notes

    #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 选项,因此您可以执行 ember g route friends/edit --path=:friend_id/id 创建嵌套 friends 下的路由喜欢:this.route('edit', {path: ':friend_id/edit'})

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 2023-04-08
      • 2019-12-27
      相关资源
      最近更新 更多