2014-12-05 34 views
0

我已经在这里工作了几天,并决定咬紧牙关并寻求帮助。动态创建和删除Ember模型/在运行时

我使用烬,CLI,和我想在运行时根据一些元数据动态创建灰烬模型。如果用户想要指定一个数据集(查询,文件等),那么就是一个示例用例。我想读取用户的数据文件并根据文件结构设置模型。

我已经成功地建立,它使用灰烬数据及固定装置(为简单起见)余烬-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并在约定的方式整体配置真的很感动一些帮助或指导。

感谢,

戴夫

+0

当你完成这个任务之后,你将会学到更多关于Ember的知识,而不是你真正想要的。 – 2014-12-05 07:49:24

回答

1

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

init此外,我怀疑定义属性会工作,它可能会,但它实际上不是必要的。

第三,你真的想使用Ember数据吗? Ember Data非常有见地,听起来像你不想定义的东西。