我有一个ember-cli应用程序,我需要根据位于远程位置的配置数据动态生成一些ember数据模型。我有一个初始化程序,它推迟了应用程序就绪,并通过ajax获取配置数据。
现在在一个老式的ember应用程序中,从那时起我只需生成DS.Model
个对象并将它们分配给全局App
ember应用程序实例。但是,在ember-cli中,我不确定如何定义模型,以便应用程序的其余部分可以找到它们,因为默认情况下,ember-cli的解析器根据文件名/目录生成模型及其名称结构
答案 0 :(得分:4)
事实证明它比我想象的要简单一些。基本上只需要在我的初始值设定项中为我动态生成的每个模型使用Ember.Application.register
,如下所示:
import Ember from "ember";
import request from "ic-ajax";
import DS from "ember-data";
export default {
name: 'model-config',
initialize: function(container, application) {
application.deferReadiness();
request('/path/to/model/config/data').then(function(response) {
Ember.$.each(response.tables, function(modelName, modelCfg) {
var cfg = {};
Ember.$.each(modelCfg, function(fieldName, fieldCfg) {
if(typeof fieldCfg === 'string') {
cfg[fieldName] = DS.attr(fieldCfg);
} else {
cfg[fieldName] = DS[fieldCfg.type](fieldCfg.model);
}
});
application.register('model:' + modelName, DS.Model.extend(cfg));
});
application.advanceReadiness();
});
}
};