【问题标题】:ember cli naming conventions for models and relative adapters模型和相关适配器的 ember cli 命名约定
【发布时间】:2025-12-21 09:55:12
【问题描述】:

是否可以使用geo-data 之类的模型名称? 让我解释一下

我有一个这样的模型

// app/models/geo-data.js
import DS from 'ember-data';

var geoData = DS.Model.extend({
    name: DS.attr('string')
});

geoData.reopenClass({
    FIXTURES: [
        {
            name: 'foo'
        }
    ]
});

export default geoData;

那么我有一条路线

// app/routes/index.js
import Ember from 'ember';

export default Ember.Route.extend({
   model: function() {
       return this.store.find('geo-data');
   }
});

还有一个适配器

// app/adapters/geo-data.js
import DS from 'ember-data';

export default DS.FixtureAdapter.extend({});

但我的应用不断尝试向 http://customhost.com/geoData 发送 GET 请求

  1. 首先它不应该执行任何请求,它在一个夹具适配器下
  2. 它向/geoData而不是/geo-data发送请求

我肯定错过了一些东西,你能启发我吗? 谢谢

【问题讨论】:

    标签: ember.js ember-data ember-cli


    【解决方案1】:

    默认情况下,REST 适配器会将您的模型进行骆驼化和复数化,以获取关联的端点。如果您想覆盖此功能,您可以覆盖适配器。有关所有文档,请参阅http://emberjs.com/api/data/classes/DS.RESTAdapter.html#method_pathForType,但对于您的场景,如果您想保留破折号,您可以执行类似

    的操作
    export default DS.RESTAdapter.extend({
      pathForType: function(type) {
        var dasherized = Ember.String.dasherize(type);
        return dasherized;
      }
    });
    

    就夹具适配器发送请求的问题而言,这似乎很奇怪,而且不应该如此。我确实注意到您的夹具数据没有id,它绝对应该。这是一个使用夹具适配器的示例。

    http://emberjs.jsbin.com/firore/1/edit?html,css,js,output

    App = Ember.Application.create();
    
    App.Router.map(function() {
      // put your routes here
    });
    
    App.IndexRoute = Ember.Route.extend({
      model: function() {
        return this.store.find('foo');
      }
    });
    
    
    App.FooAdapter = DS.FixtureAdapter.extend({});
    App.FooModel = DS.Model.extend({
      name: DS.attr()
    });
    
    App.FooModel.reopenClass({
        FIXTURES: [
            {
                id: 1,
                name: 'foo'
            },
            {
                id:2,
                name: 'bar'
            }
        ]
    });
    

    我还要注意,我过去曾遇到过名为“数据”的对象可能导致意外行为的问题。

    【讨论】:

    • 问题是-data.....太疯狂了!谢谢你的提示,我从来没有想过这个