【问题标题】:Reuse ember controller for two routes, but pre populate part of model on one of the routes为两条路线重用 ember 控制器,但在其中一条路线上预先填充模型的一部分
【发布时间】:2015-06-12 12:29:22
【问题描述】:

假设我们在应用中对存储库进行建模。我们希望能够在 /repos/ 上看到我们所有的 repo。

我们可以在 /repos/create 创建一个 repo。在我们的模型中,repo 有一个所有者(用户),沿着这条路线我希望我的 create.hbs 模板中的第一个表单字段选择一个用户。

但通过在 /users/userId/repos 上查看用户来创建 repo 也可能是有意义的,然后路由可能是 /users/userId/repos/create。这里的不同之处在于我的表单的第一个字段将预先填充用户。

我知道我可以通过在我的路由中指定这个来重用同一个控制器:

controllerName: 'repos/create'

(对于这条复杂的路线,ember generate 语句/将这条路线放在我的文件夹结构中的位置是什么?)

但是我如何将用户传递给 repos/create 控制器?

【问题讨论】:

  • 不是一个真正的答案,所以添加评论:根据我自己的经验,尝试重用控制器/路由是不值得的。最终,您最终希望在每个行为中都有一些自定义行为,并且您必须撤消所做的所有工作。我可以建议您单独创建它们吗?然后,如果您真的想要一些共享行为,并且您已经注意到很多代码重叠,请创建一个 Mixin,然后将其混入。
  • 我建议您对表单使用可重用组件。如果您阅读有关准备 ember 2.0 的信息,您可能只想使用三元组(路由、控制器(仅用于处理路由模板)、模板)和大量可重用组件。三元组很快就会成为可路由的组件。
  • 在 ember 2.0 @Artych 中您有更多详细信息的链接吗?这是他们从 MVC 迁移到 Model-Route-Component-Service 的一部分吗?
  • gist.github.com/samselikoff/1d7300ce59d216fdaf97(带对话),这不是教程,但很有帮助

标签: ember.js ember-cli


【解决方案1】:

@Artych 的评论提供了目前执行此操作的最佳方法,因此请对此进行扩展。

最后我创建了一个repo-create 组件,它可能会或可能不会传递一个用户对象。然后可以在组件本身的逻辑中设置处理预填充内容的逻辑。

这只是在/repos/create.hbs/user/repos/create.hbs 处都有一个带有组件的单行模板的情况。

然后我遵循在 routes/user/repos/create.js 路由中使用我的用户作为我的模型并将其传递给我的模板中的组件的方法

{{repo-create user=model}}

通过这种方法,我避免了在控制器上明确执行任何操作,并且升级到 Ember 2.x 会少很多痛苦。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 2023-03-27
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多