2014-01-29 3 views
1

У меня возникает странная проблема при использовании данных ember. Со следующей моделью пользователя все отлично работает.Ember Data Endpoint Issue

App.User= DS.Model.extend({ 
    firstName: attr(), 
    lastName: attr() 
}); 

Я вызываю user.save() и является сообщениями/пользователями с правильными данными. Однако, когда я пытаюсь и использовать пользовательскую модель, которая имеет отношение на ней

App.User= DS.Model.extend({ 
    firstName: DS.attr('string'), 
    lastName: DS.attr('string'), 
    friends: DS.hasMany('user'), 
    followers: DS.hasMany('user'), 
}); 

По какой-то причине с этой моделью, когда я называю user.save() он отправляет в/Users (обратите внимание на капитализацию. Кроме того, в ответ он ожидает, что он отформатирован {«Пользователь»: {...}} вместо {"user": {...}}

Кто-нибудь сталкивался с этим раньше? Я всегда мог добавить дополнительные конечные точки в свой api, однако я хотел бы, чтобы он был в рабочем состоянии, если это возможно.

+0

Я не вижу этого Роба, вы можете обновить свой jsbin тиражировать? http://emberjs.jsbin.com/OxIDiVU/151/edit – Kingpin2k

+0

Я нашел проблему kingpin2k. см. мои объяснения ниже. спасибо за настройку jsbin. – Rob

ответ

0

Я сделал немного больше копания, и кажется, что когда вы добавляете отношение к модели, вычисленное свойство называется relationshipByName. В моем примере roperty установит свойство meta.type в «Пользователь». Он работает без отношений, потому что я вызвал метод createRecord с «user», поэтому я предполагаю, что он использует это как тип. Когда связь добавлена, она использует «Пользователь»

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

App = Ember.Application.create({ 
    Resolver: Ember.DefaultResolver.extend({ 
     normalize: function(fullName) { 
      var n = this._super(fullName); 
      if(fullName.startsWith('model')){ 
       n = n.replaceAt(6, n[6].toLowerCase()); 
      } 
      return n; 
      } 
     }) 
}); 

* обратите внимание, у меня есть строки расширения для StartsWith и replaceAt