ember中的数据共享

Sam*_*off 6 ember.js

我试图了解如何在我的控制器/路由之间共享数据.

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

 /                summary info
 /companies       list of all companies with some more detail
 /companies/:id   details about a single company
Run Code Online (Sandbox Code Playgroud)

现在,所有三条路线所需的数据都包含在单个公司数据数组中.所以,我想在应用启动时加载数据,然后用于每条路线.我还需要在控制器上使用其他方法进行共享.

很明显,第二条和第三条路线是嵌套的,所以我可以CompaniesController通过传递该公司的数据,从我链接到特定公司时共享数据:

{{#linkTo 'company' company}}{{ company.name }}{{/linkTo}}
Run Code Online (Sandbox Code Playgroud)

但总结路线是我陷入困境的地方.我提出的两个选项:

  1. 创建CompaniesController与我需要任何额外的方法,并创建IndexController通过扩展它

    App.IndexController = App.CompaniesController.extend({});
    
    Run Code Online (Sandbox Code Playgroud)

    然后,据我所知,两条路线都需要找到模型:

    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();
        }
    });
    
    Run Code Online (Sandbox Code Playgroud)

    似乎应该有更好的方法,因为我必须为我添加的每个新路线重复此操作(例如/revenue).

  2. summary路由嵌套在companies资源中,并为其指定路径"/".我不喜欢这个是我的UI的'嵌套'与数据不匹配.我似乎还要model为每条路线重新定义房产.

还有其他选择更好吗?

tl; dr:我应该如何跨控制器共享数据?

int*_*xel 3

要在控制器之间共享数据,正确的方法是使用needsAPI

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

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

为了使事情更容易访问,您可以另外定义一个绑定,例如:

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

希望能帮助到你。