2015-09-05 98 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

相关问题