【问题标题】:Creating and removing Ember Models dynamically / at runtime动态/在运行时创建和删除 Ember 模型
【发布时间】: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


【解决方案1】:

你本质上是在定义一些东西,然后把它扔掉。您需要将它附加到应用程序的命名空间(如果您使用 Ember-cli,您可以在索引文件或配置文件中看到它)。

此外,我怀疑在 init 上定义属性是否可行,它可能会起作用,但实际上没有必要。

第三,您真的要为此使用 Ember Data 吗? Ember Data 非常固执己见,听起来您不想定义事物。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-26
    • 2016-11-13
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 2013-05-06
    相关资源
    最近更新 更多