2014-09-05 70 views
2

我有一個ember-cli應用程序,我需要根據駐留在遠程位置的配置數據動態生成一些ember數據模型。我有一個初始化器,它可以延遲應用程序的準備,並通過ajax獲取配置數據。在ember-cli中動態生成ember-data模型

現在,在一個古老的燼寶應用程序中,從那一刻起,我只需生成我的DS.Model對象並將它們分配給全局的App燼應用程序實例。然而,在一個ember-cli中,我不確定如何定義這些模型,以便可以在應用程序的其餘部分找到它們,因爲默認情況下,ember-cli的解析器根據文件名/目錄結構生成模型及其名稱。

回答

3

事實證明這比我想象的要簡單一些。基本上只需要在我的初始化程序中爲我動態生成的每個模型使用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(); 
     }); 
    } 
};