我是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
模型时, go /#/posts
,视图没有呈现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
是因为我的后端实际上不支持 ember 样式的 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({});