在两个控制器之间共享公共功能,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();
}
});