gpt4 book ai didi

ember.js - 在两个 Controller 之间共享通用功能,Ember.js 2.0 方式

转载 作者:行者123 更新时间:2023-12-02 19:42:23 24 4
gpt4 key购买 nike

现在,我有一个资源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 方式执行操作并避免所有 View ),因此我创建了 unapproved-proapproved-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 ),我需要为组件提供模型,并在 Controller 中保留分页和其他操作的逻辑。这很好。问题是这样的;

我的索引页是未批准已批准 页面的重复。可以免除表中可见的行数。如果我放置某些逻辑,例如 provider 的“批准”,那么我必须为 index Controller 和 pending 执行此逻辑> Controller 。如何在保持干燥的同时共享这些功能?

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

此问题已交叉发布到 ember 讨论页面 http://discuss.emberjs.com/t/sharing-common-functionality-between-two-controllers/7632

最佳答案

我通过 ember services 取得了很大的成功,主要用于管理用户的某种全局可访问状态,但也用于使对非常规外部 API 或库的调用更具适应性。

以下是我用来创建 session 服务的生成命令(在 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
});

后来在 route 使用它(在本例中它被添加到所有 route ):

// inside routes/index.js
import Ember from 'ember';

export default Ember.Route.extend({

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

关于ember.js - 在两个 Controller 之间共享通用功能,Ember.js 2.0 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29284778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com