现在,我有一个资源providers
,我有一个index
,我有一个route 'show'
,还有几条路线,其他几条路线用于列出不同的用户。这是完整的 router.coffee 文件
Router.map ->
@resource 'admin', ->
@resource 'admin.providers', { path: '/providers' }, ->
@route 'show'
@route 'unapproved'
@route 'approved'
@route 'pending'
问题是index
只是未经批准,已批准和待定页面的组合,每个页面都使用具有不同type
参数的单个模型获取
我最初的设置方向是创建组件(尝试使用Ember 2.0方式并避免所有视图)所以我创建了unapproved-pro
,approved-pro
等等,使用了ember-table
来在桌子上显示东西。我以为我会让这些组件自给自足,以便他们获取数据,获取下一页以及其他操作(如删除或更新)
现在从阅读(http://discuss.emberjs.com/t/how-to-make-ember-component-fetch-data-from-server-put-ajax-call-inside-the-component-seems-not-a-good-practise-to-handle-this/6984),我需要为组件提供模型,并保持控制器中的分页和其他操作的逻辑。哪个好。这是问题所在;
我的索引页面是unapproved
和approved
页面的重复。可以免除表中可见的行数。如果我放置某些逻辑,例如'{1}}的“批准”,那么我将不得不为provider
控制器和index
控制器执行此逻辑。如何在保持干燥的同时分享这些功能?
快速说明,我原本以为我能够创建能够处理所有这些操作的自包含组件。因此,与pending
相关的所有内容都将自包含在该组件中,以便我可以将其放在任何位置。我仍然认为这可能是一个有效的选择。
此问题已在http://discuss.emberjs.com/t/sharing-common-functionality-between-two-controllers/7632
的汇总讨论页面上交叉发布答案 0 :(得分:0)
我在ember services取得了很大成功,主要用于管理用户的某种全局可访问状态,但也用于调用非规范外部API或库更具适应性。
以下是我用来制作会话服务的生成命令(在ember-cli 1.13.7 +上):
ember generate initializer session
ember generate service session
然后在结果文件中(再次使用ember-cli样式)
// 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();
}
});