Ember.js 余烬中的数据共享

Ember.js 余烬中的数据共享,ember.js,Ember.js,我试图了解如何在控制器/路由之间共享数据 我有一个显示公司数据的应用程序。以下是我想要的路线: / summary info /companies list of all companies with some more detail /companies/:id details about a single company 现在,所有三条路线所需的数据都包含在公司数据的单个数组中。因此,我希望在应用程序启动时加载这些数据,然后用于每条路线。

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

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

 /                summary info
 /companies       list of all companies with some more detail
 /companies/:id   details about a single company
现在,所有三条路线所需的数据都包含在公司数据的单个数组中。因此,我希望在应用程序启动时加载这些数据,然后用于每条路线。我还需要在控制器上共享其他方法

很明显,第二条和第三条路由是嵌套的,因此当我链接到特定公司时,我可以通过传递该公司的数据来共享来自
companyescontroller
的数据:

{{#linkTo 'company' company}}{{ company.name }}{{/linkTo}}
但总结路线是我被卡住的地方。我想出了两个选择:

  • 使用我需要的任何其他方法创建
    companyescontroller
    ,并通过扩展创建
    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

  • 摘要
    路由嵌套在
    公司
    资源中,并为其指定路径“/”。我不喜欢的是UI的“嵌套”与数据不匹配。似乎我还必须为每条路线重新定义
    模型
    属性

  • 还有更好的选择吗


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

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

    假设您的
    companyescontroller
    拥有您希望提供给其他控制器的所有数据,您应该通过
    needs
    对其进行定义,这可以是一个简单的字符串,也可以是一个字符串数组(如果您定义了多个)

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

    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中创建一个控制器仅用于存储和共享模型数组是否合适?如果您有“应用程序设置”之类的数据,则使用一个不属于路由/控制器/视图组合的设置控制器是可以的。然后,您可以使用需求API将您的设置提供给其他控制器。但是,如果您的数据与您定义的资源树相关,那么为每个资源指定一个特定的控制器是更好的方法,您仍然可以共享所有类型的控制器。很抱歉打断一下,我想澄清一些问题@直觉像素:这是反方向的吗?索引路线
    需要公司?这个
    需要
    在容器上查找还是路线挂钩也会开火?@DarshanSawardekar,请便:)你说的相反方向是什么意思?就绑定而言?比如说与上述
    /
    摘要路由对应的
    索引控制器
    ,使用
    需要
    公司
    。现在它有一个控制器引用,但是
    companyescontroller
    从哪里获取数据?公司路线挂钩/设置控制器是否开火?