med*_*kin 6 ember.js ember-data
我正在尝试在我的Ember应用程序(v1.8)中获取所有已定义模型的列表.
据我所知,Container.resolver可以使用一些神秘的魔法.Container是否包含所有活动模型的列表,或者有没有办法获取它们?
谢谢 :)
@编辑
kingpin2k的答案有效,但在Ember-Cli中没有,还有另一种方法吗?
所以,对于Ember Cli来说,没有一个我能找到的直接解决方案.但是,您可以通过一些创意编码和分析ember-inspector的来源解决问题.
var models = Object.keys(require._eak_seen).filter(function(module) {
return module.indexOf(config.modulePrefix + '/models/') === 0;
});
Run Code Online (Sandbox Code Playgroud)
此代码段迭代在requirejs中注册的模块,并仅提取所需的模块(在我们的示例中为模型).
要使"config.modulePrefix"部分起作用,您需要导入conf文件(修复路径):
import config from '../config/environment';
Run Code Online (Sandbox Code Playgroud)
或者,您可以将"config.modulePrefix"硬编码为"myappname"或使用此代码:
this.container.resolver.__resolver__.namespace.modulePrefix
Run Code Online (Sandbox Code Playgroud)
PS:要检查您需要使用的模型:
require(_the_model_module_name).default
Run Code Online (Sandbox Code Playgroud)
所以我添加了这个,因为我遇到了我认为现在最好的解决方案(post ember-cli和ember容器更改):
// in a route
// routes/route.js
import Ember from 'ember'
const { Route, getOwner } = Ember
export default Route.extend({
model: function(){
return getOwner(this)
.lookup('data-adapter:main')
.getModelTypes()
.map(type => type.name)
}
})
// somewhere else in an ember application
const modelNames = getOwner(this)
.lookup('data-adapter:main')
.getModelTypes()
.map(type => type.name)
Run Code Online (Sandbox Code Playgroud)
这里是链接到源在灰烬管理员在GitHub上.
实际上,最简单的方法就是迭代您的名称空间并查找其超类为的对象DS.Model
for (var key in App) {
var value = App[key],
superClass = value ? value.superclass : undefined;
if (superClass && superClass === DS.Model) {
console.log(value);
}
}
Run Code Online (Sandbox Code Playgroud)
http://emberjs.jsbin.com/OxIDiVU/899/edit
归档时间: |
|
查看次数: |
1635 次 |
最近记录: |