Я ember.js
новичка и облицовочные ежедневные проблемы :-)ember.js, Как загрузить связанные модели при загрузке основной модели с сервера, который не поддерживает sideloading
Сегодня проблема заключается в моем внутреннем сервер не поддерживает боковой загрузчик. (Если я правильно понял «sideload» правильно, то сервер возвращает связанные модели сразу с несколькими корень JSON)
, например, мой сервер возвращает только ниже по запросу:
для /api/v1/posts.json
{
posts: [{
id: 91,
title: "ember.js"
}, {
id: 81,
title: "ember-data.js"
}]
}
для /api/v1/comments.json
{
comments: [{
id: 928,
postId: 91,
}, {
id: 927,
postId: 92,
}]
}
Когда я загружаю post
модель, перейдите /#/posts
, вид didnot визуализации comment
, но если я загружаю comment
вручную, введя URL-адрес comment route
в строке местоположения, /#/comments
, и вернитесь, комментарии отображаются правильно.
, так что я просто попробовать, как это, в post route
(третья строка)
App.PostsRoute = Ember.Route.extend({
model: function(params) {
this.store.find('comment');
return this.store.find('post');
}
})
и это работает! (загружайте и заполняйте комментарий тоже!), но я думаю, что это неправильный путь.
Есть ли какой-либо хороший или правильный способ сделать это?
Редактировать - добавить определения модели
Мой пост модель что-то вроде:
App.Post = DS.Model.extend({
title: DS.attr('string'),
content: DS.attr('string'),
comments: DS.hasMany('comment', {async: true}),
})
и комментариев модели:
App.Account = DS.Model.extend({
content: DS.attr('string'),
post: DS.belongsTo('post'),
})
Я не использую ember-cli
и начал с ember-starter-kit
и посмотреть некоторые учебные пособия с домашней и веб-страницы.
И я использую обычай Adapter
, потому что мой бэкэндом, в FACK, не поддерживает уголек стиль ответа JSON, и я не могу прикоснуться к ней:
App.SpinAdapter = DS.ActiveModelAdapter.extend({
host: 'http://spin.example.com:8080',
namespace: 'api/v1',
init: function() {
this._super();
console.log('SpinAdapter...');
}
});
App.SpinSerializer = DS.ActiveModelSerializer.extend({
extract: function(store, type, payload, id, requestType) {
console.log('SpinSezer#extract...' + type + '/' + id + '/' + requestType);
return payload;
},
});
App.PostAdapter = App.SpinAdapter.extend({});
App.PostSerializer = App.SpinSerializer.extend({});
App.CommentAdapter = App.SpinAdapter.extend({});
App.CommentSerializer = App.SpinSerializer.extend({});
Можете ли вы показать нам определение модели 'post'? –
@torazaburo, я добавляю свои определения моделей и адаптеров. – sio4