【问题标题】:(Ember.js) How to Share Model Data Among Unrelated Resources/Routes?(Ember.js) 如何在不相关的资源/路由之间共享模型数据?
【发布时间】:2015-08-07 11:29:34
【问题描述】:

在不共享父资源/路由的资源/路由之间共享模型数据的最佳方式(Ember 方式)是什么?

详情:

我有 2 个顶级资源(resource1 和 resource2),它们的模型钩子通过 Ajax 检索几乎相同的数据,因此它们的模型钩子代码看起来也几乎相同,即不是很干燥。不同之处在于他们各自处理这些数据的方式。

目标:保留 resource1 和 resource2 顶级资源(或至少让它们的 URL 看起来像是顶级资源),让它们共享一些模型数据,而无需复制模型挂钩代码。

资源/路由定义:

App.Router.map(function () {
    ...
    this.resource("resource1", function () {
        this.route("routeA");
        this.route("routeB");
    });
    this.resource("resource2", function () {
        this.route("routeA");
        this.route("routeB");
    });
    ...
}  

所需的网址:

example.com/#/resource1/routeA
example.com/#/resource1/routeB

example.com/#/resource2/routeA
example.com/#/resource2/routeB  

[嵌套在公共资源中] 像这样:

example.com/#/resource0/resource1/...
example.com/#/resource0/resource2/...

提前致谢!

【问题讨论】:

  • 用通用模型钩子写一个mixin。使 resource1 和 resource2 路由从它延伸出来。
  • 感谢您的回复,祝福。我考虑过使用 mixin,但决定反对它——mixin 并没有真正删除重复项,它只是隐藏了它。

标签: ember.js


【解决方案1】:

这对我有用:

App.Router.map(function () {
    ...
    this.resource("resource0", { path: "/" }, function () {
        this.resource("resource1", function () {
            this.route("routeA");
            this.route("routeB");
        });
        this.resource("resource2", function () {
            this.route("routeA");
            this.route("routeB");
        });
    }
    ...
}

将resource0 的路径指定为“/”实质上会从URL 路径中删除“resource0”,使resource1 和resource 2 看起来像顶级资源。然后我将resource1和resource 2中所有重复的model hook代码分解到resource0的model hook中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-23
    • 2021-09-24
    • 1970-01-01
    • 2020-08-27
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    相关资源
    最近更新 更多