【发布时间】:2014-12-05 17:40:13
【问题描述】:
我已经为此工作了几天,并决定硬着头皮寻求帮助。
我正在使用 ember-cli,我正在尝试根据一些元数据在运行时动态创建 Ember 模型。一个示例用例是如果用户想要指定一个数据集(查询、文件等);我想读取用户的数据文件并根据文件的结构设置模型。
我已经成功设置了一个使用 Ember Data and Fixtures 的 ember-cli 应用程序(为简单起见)。我的静态示例有三个模型,当我使用 Chrome Ember 调试器时,我可以在 Store 中看到模型和数据。
现在开始我的动态示例...
通过在 IndexRoute 中设置模型,我已经能够在运行时成功定义模型
var IndexRoute = Ember.Route.extend({
init: function() {
// Create a simple model dynamically
var MyModel = DS.Model.extend({
defineAttributes: function(){
Ember.defineProperty(this, 'col1', DS.attr());
Ember.defineProperty(this, 'col2', DS.attr());
Ember.defineProperty(this, 'col3', DS.attr());
}.on('init')
});
// insert some data into our model
MyModel.reopenClass({
FIXTURES: [
{
id: '1',
col1: "key1",
col2: "value1",
col3: "value2"
},
{
id: '2',
col1: "key2",
col2: "value1",
col3: "value2"
},
{
id: '3',
col1: "key3",
col2: "value1",
col3: "value2"
}
]
});
}
});
问题是我没有看到模型放置在哪里,并且它没有出现在数据(存储)的 Chrome 调试器中。
如果我将 MyModel 的定义更改为 Ember.Application.MyModel,那么我可以在控制台中看到模型在 Ember.Application 下定义,但 Ember 调试器仍然看不到它。
然后我尝试扩展上面的示例以添加model 挂钩,如下所示:
var IndexRoute = Ember.Route.extend({
init: function() {
...
},
model: function() {
return this.store.findAll('my-model');
}
});
但是对this.store.findAll('my-model') 的调用在这两种情况下都失败了。我假设我没有正确接线。
在我的示例中,我还知道我的模型的名称也不是动态的,所以我真的很想知道如何在运行时以编程方式为我的模型创建名称。
我非常感谢那些对框架更有经验的人的帮助或指导,因为我对 Ember 和整个配置优于约定的方法印象深刻。
谢谢,
戴夫
【问题讨论】:
-
当您完成本教程时,您对 Ember 的了解将远远超过您真正想要的。
标签: dynamic ember.js ember-data