2015-09-05 99 views
0

我試圖將自定義屬性添加到Ember數據模型。具體而言,我想添加一個屬性,該屬性定義要在我正在寫入的Ember數據適配器中使用的REST終點。將自定義屬性添加到Ember模型

我的模型被定義爲這樣的(與自定義屬性 '端點'):

import DS from 'ember-data'; 

export default DS.Model.extend({ 

partner_id  : DS.attr('string'), 
partner_key  : DS.attr('string'), 
partner_name : DS.attr('string'), 
created   : DS.attr('string'), 
status   : DS.attr('string'), 
type   : DS.attr('string'), 

endPoint  : 'api_entry' 

});

在我的適配器我想如下訪問屬性:

_buildURL: function (modelName, store, id, snapshot, requestType, query) { 

    var host, namespace, url; 

    var model = store.modelFor(modelName); 

    var endPoint = model.endPoint; 
    var endPoint2 = Ember.get(model, 'endPoint'); 

    console.log(endPoint, endPoint2); 

    host = Ember.get(this, "host"); 
    namespace = Ember.get(this, "namespace"); 

    url = []; 

    if (host) { 
     url.push(host); 
    } 

    if (namespace) { 
     url.push(namespace); 
    } 

    url.push(modelName); 

    url = url.join("/"); 

    if (!host) { 
    url = "/" + url; 
    } 

    return url; 
}, 

在上述的console.log,無論端點和端點2是不確定的。我是Ember和Javascript的新手。我究竟做錯了什麼?是否有更多'Ember'的方式來做到這一點?我不想使用實際的REST端點名稱作爲我的模型名稱,因爲它們不符合Ember模型命名約定。

非常感謝。

回答

1

buildURL功能與模型處理,而不是模型實例。您需要將該屬性添加到課程中:

var model = DS.Model.extend({ 
    partner_id  : DS.attr('string'), 
    partner_key  : DS.attr('string'), 
    partner_name : DS.attr('string'), 
    created   : DS.attr('string'), 
    status   : DS.attr('string'), 
    type   : DS.attr('string') 
}); 

model.reopenClass({ 
    endPoint  : 'api_entry' 
}); 

export default model; 
+1

這可行,但我不確定該模型是否適合放置該模型。最好使用適配器。 – aceofspades

+0

然後你需要一個特殊的適配器爲每個模型。通過這種方式,您可以在應用程序適配器 – dwickern

+0

@dwickern中編寫一次代碼 - 非常感謝您的回答,爲我節省了很多挫折!我想我錯過了一個基本概念,讓我解釋一下。我可以添加自定義屬性到通過衍生控制器: 「出口默認Ember.Controller.extend」 那麼,爲什麼我不能將它們添加到通過也衍生模式「擴展」: 「出口默認DS.Model.extend' 控制器API文檔說,「擴展」創建一個新的子類,這是不是相同的模型? – InTooDeep