gpt4 book ai didi

ember.js - ember 中的数据共享

转载 作者:行者123 更新时间:2023-12-04 15:34:57 24 4
gpt4 key购买 nike

我试图了解如何在我的 Controller /路由之间共享数据。

我有一个显示公司数据的应用程序。这是我想要的路线:

 /                summary info
/companies list of all companies with some more detail
/companies/:id details about a single company

现在,所有三个路线所需的数据都包含在单个公司数据数组中。所以,我希望在应用程序启动时加载这些数据,然后用于每条路线。我还需要在 Controller 上需要共享的其他方法。

很明显第二条和第三条路由是嵌套的,所以我可以分享来自 CompaniesController的数据当我链接到特定公司时,通过传入该公司的数据:
{{#linkTo 'company' company}}{{ company.name }}{{/linkTo}}

但总结路线是我卡住的地方。我想出的两个选项:
  • 创建 CompaniesController使用我需要的任何其他方法,并创建 IndexController通过扩展它
    App.IndexController = App.CompaniesController.extend({});

    然后,据我所知,两条路线都需要找到模型:
    App.Router.map(function() {
    this.resource('companies');
    });

    App.CompaniesRoute = Ember.Route.extend({
    model: function() {
    return App.Company.find();
    }
    });

    App.IndexRoute = Ember.Route.extend({
    model: function() {
    return App.Company.find();
    }
    });

    似乎应该有更好的方法,因为我必须为我添加的每条新路线重复此操作(例如 /revenue )。
  • 嵌套 summary companies 内的路线资源,并给它一个路径'/'。我不喜欢的是我的 UI 的“嵌套”与数据不匹配。看来我还得重新定义 model每个路由的属性。

  • 还有其他更好的选择吗?

    tl;dr:我应该如何跨 Controller 共享数据?

    最佳答案

    要共享 beetwen Controller 的数据,正确的方法是使用 needs API .

    假设您的 CompaniesController拥有您想要提供给其他 Controller 的所有数据,您应该通过 needs 定义它,这可以是一个简单的字符串,也可以是一个字符串数组(如果您定义了多个字符串)。

    App.MyController = Ember.ObjectController.extend({
    needs: ['companies'],
    myFunction: function() {
    // now you can access your companies controller like this
    this.get('controllers.companies');
    }
    });

    为了使事情更容易访问,您可以另外定义一个绑定(bind),例如:
    App.MyController = Ember.ObjectController.extend({
    needs: ['companies'],
    companiesBinding: 'controllers.companies',
    myFunction: function() {
    // now you can access your companies controller like this
    this.get('companies');
    }
    });

    希望能帮助到你。

    关于ember.js - ember 中的数据共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17747876/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com