Соглашения об именах ember cli для моделей и соответствующих адаптеров

возможно ли иметь такие названия моделей, как 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({});

но мое приложение пытается отправить запрос GET на http://customhost.com/geoData

  1. Во-первых, он не должен выполнять никаких запросов, он находится под адаптером приспособления.
  2. Он отправляет запрос /geoData, а не /geo-data

Я что-то точно упускаю, не могли бы вы меня просветить? Спасибо


person Fed03    schedule 19.01.2015    source источник


Ответы (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'
        }
    ]
});

Я также хотел бы отметить, что в прошлом у меня были проблемы с объектами с именем «данные», которые могут вызывать неожиданное поведение.

person RyanHirsch    schedule 19.01.2015
comment
проблема была _1 _..... это безумие! Спасибо за подсказку, я никогда не думал об этом - person Fed03; 19.01.2015