2015-07-26 5 views
2

В уголек 1.13.3 приложения, у меня есть этот маршрут:найти и FindAll возвращают пустой массив

import Ember from 'ember'; 

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

и эта модель:

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    name: DS.attr('string'), 
    description: DS.attr('string'), 
    link: DS.attr('string'), 
    acquired_skills: DS.hasMany('users', { async: true, inverse: 'acquired_skills' }), 
    searched_skills: DS.hasMany('users', { async: true, inverse: 'searched_skills' }) 
}); 

Это результат, возвращаемый API:

{"skills":[{"id":1,"name":"Ember","description":"JS Framework","link":null}]} 

Массив пуст. Я могу проверить это с помощью этого console.log(this.store.find('skill').get('length'));, и у меня есть 0.

Что случилось?

ответ

5

store.find() - асинхронная операция. Он возвращает обещание. Чтобы получить доступ к фактическим данным, вы должны передать ответ на обещание. Когда данные извлекаются из внутреннего интерфейса, обещание решает и выполняет функцию обратного вызова, передавая в нее данные:

var foo = this.store.find('skill'); 

console.log("typeof foo", typeof foo); 

foo.then(function(result) { 
    console.log("result", result); 
}); 

console.log("end of script"); 

Приведенный выше код будет производить следующий вывод:

TYPEOF Foo, Promise
конец сценария
результата, Object

UPD 1

Вы используете JSONAPIAdapter. Показанная полезная нагрузка не соответствует спецификации JSON API. Вы должны обновить свой сервер, чтобы соответствовать спецификации.

Если вы не можете, использовать RESTAdapter и RESTSerializer как обходной путь:

приложение/адаптеры/application.js

import DS from 'ember-data'; 

export default DS.RESTAdapter.extend({ 
    host: 'http://localhost:3000', 
    namespace: 'api/v1' 
}); 

приложение/сериализаторы/application.js

import DS from 'ember-data'; 

export default DS.RESTSerializer.extend({ 
    isNewSerializerAPI: false 
}); 

Дополнительная информация здесь: http://emberjs.com/blog/2015/06/18/ember-data-1-13-released.html

+0

Я сделал 'console.log (" result ", result.get ('length'))' и у меня есть 0. В любом случае, '{{#each model as | skill |}} {{skill.name}} {{/ each}} 'Показывать ничего. – Dougui

+0

Ну, тогда вам нужно разделить полезную нагрузку, получаемую от бэкэнда. –

+0

Можете ли вы воспроизвести это в JSbin или что-нибудь еще? Я использовал ваш код для создания небольшого приложения на своем компьютере, и у меня нет никаких проблем. Вы получаете какие-либо ошибки консоли или предупреждения? Мой '{{#each}}' печатает имя навыка, как ожидалось. –

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