Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在两个控制器之间共享公共功能,Ember.js 2.0方式_Ember.js_Ember Cli - Fatal编程技术网

在两个控制器之间共享公共功能,Ember.js 2.0方式

在两个控制器之间共享公共功能,Ember.js 2.0方式,ember.js,ember-cli,Ember.js,Ember Cli,现在,我有一个资源提供者,我有一个索引,我有一个路由“show”,以及一些称为其他路由的路由,用于列出不同的用户。这是完整的路由器.coffee文件 Router.map -> @resource 'admin', -> @resource 'admin.providers', { path: '/providers' }, -> @route 'show' @route 'unapproved' @route 'approved

现在,我有一个资源
提供者
,我有一个
索引
,我有一个
路由“show”
,以及一些称为其他路由的路由,用于列出不同的用户。这是完整的路由器.coffee文件

Router.map ->
  @resource 'admin', ->
    @resource 'admin.providers', { path: '/providers' }, ->
      @route 'show'
      @route 'unapproved'
      @route 'approved'
      @route 'pending'
问题是,
索引
只是未批准、已批准和挂起页面的组合,每个页面都是使用具有不同
类型
参数的单个模型获取的

我最初的设置方向是创建组件(尝试以Ember 2.0的方式进行操作并避免所有视图),因此我创建了
unapproved pro
approved pro
等等,使用
Ember table
在表格中显示内容。我想我会让这些组件自给自足,这样它们就可以获取数据、获取下一页以及其他操作(如删除或更新)

现在,通过阅读around(),我需要为组件提供模型,并在控制器中保留分页和其他操作的逻辑。这很好。问题是这样的

我的索引页是
未批准
已批准
页的副本。豁免表中可见的行数。如果我对
提供者设置了某些逻辑,如“批准”,那么我必须对
索引
控制器和
待决
控制器执行此逻辑。如何在保持干燥的同时共享这些功能

请注意,我最初确实认为我能够创建能够处理所有这些操作的自包含组件。因此,与未经批准的
pro
相关的所有内容都将包含在该组件中,以便我可以将其放在任何地方。我仍然认为这可能是一个有效的选择


这个问题被交叉发布到余烬的讨论页面上,我在这方面取得了很大的成功,主要是为了管理用户的某种全局可访问状态,也为了调用更具适应性的非标准外部API或库

以下是我用来创建会话服务的generate命令(在ember cli 1.13.7+上):

然后在生成的文件中(同样是ember cli样式)

后来在一条路线中使用了它(在本例中,它被添加到所有路线中):

ember generate initializer session
ember generate service session
// inside initializers/session.js
export function initialize(container, application) {
    // add this service to all routes
    application.inject('route', 'session', 'service:session');
}

export default {
    name: 'session',
    after: 'store',

    initialize: initialize
};
// inside services/session.js
import Ember from 'ember';

export default Ember.Service.extend({

    init: function () {
        // init called automatically
        console.info('Session::Service init()');
    },
    read: function () {
        // sample service function
    }

    // ... your code here
});
// inside routes/index.js
import Ember from 'ember';

export default Ember.Route.extend({

    setupController: function () {
        this.get('session').read();
    }
});