2014-10-01 3 views
1

У меня есть две модели асинхронное:Ember устанавливает только один элемент вместо многих

App.Posts = DS.Model.extend({ 
    'content': attr('string'), 
    'comments': DS.hasMany('comments', {async: true}), 
}); 

App.Comments = DS.Model.extend({ 
    'body': DS.attr('string'), 
    'postId': DS.belongsTo('posts', {async: true}) 
}); 

Через PostController я пытаюсь загрузить Комментарии OnClick через действие:

App.PostController = Ember.ArrayController.extend({ 
    loadComments: function(post_id) { 
     this.store.find('comments', post_id); 
    } 
}); 

(возможно, там это лучший способ сделать это?)

Запрос и ответ API верны (см. ответ API ниже), но отображается только один комментарий, затем Ember выдает сообщение об ошибке:

TypeError: Cannot read property 'postId' of undefined 

В Embers Console> Вкладка «Данные» есть комментарий в модели комментариев, но в модели комментариев также есть элемент post с параметрами комментариев, установленными на undefined. Это объясняет, почему Ember не может прочитать свойство postId, потому что это не комментарий. Почему Ember выталкивает сообщение в модель комментариев и только толкает один, а не 3 комментария в модель?

API Ответ

{ 
    "comments": [ 
     { 
      "id": 2, 
      "postId": 31152, 
      "body": "Lorem ipsum dolor sit amet, consetetur", 
     }, 
     { 
      "id": 2, 
      "postId": 31152, 
      "body": "asdasd", 
     }, 
     { 
      "id": 2, 
      "postId": 31152, 
      "body": "asd asd sd", 
     } 
    ] 
} 
+0

Вы можете показать свой маршрутизатор. Если ваши комментарии вложены в почтовый ресурс, вы должны указать это в своем контроллере. – Stakoov

ответ

0

Это небольшой выстрел в темноте, и я бы вообще поставил его в качестве комментария, но это немного большим. Можете ли вы попытаться изменить все ссылки на модели на сингулярные. Это правильный шаблон для моделей Ember Data.

App.Post = DS.Model.extend({ 
    'content': attr('string'), 
    'comments': DS.hasMany('comment', {async: true}), 
}); 

App.Comment = DS.Model.extend({ 
    'body': DS.attr('string'), 
    'postId': DS.belongsTo('post', {async: true}) 
}); 

this.store.find('comment', post_id); 

И теперь, когда я пишу это, я могу увидеть еще одну проблему. Если вы запрашиваете комментарии post_id (делаете вид, что это 7), то Ember Data ожидает одну запись, а не коллекцию записей. Поэтому он, вероятно, смотрит на коллекцию комментариев и думает, что это единственная запись, и это просто взрывает ее логику.

+0

Да, в конце концов единственное для Moels было ключом, но и для запроса комментариев: this.store.find ('comment', {postId: post_id}); , потому что с простым параметром Ember ожидает, что в качестве ответа будет один объект. При запросе ("{postId: post_id}") Ember ожидает массив. –

Смежные вопросы