2014-12-05 76 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非常有見地,聽起來像你不想定義的東西。