Javascript Ember.js:重新加载一个.hasMany关系通过";链接“;有效载荷中
假设我有两个模型,Javascript Ember.js:重新加载一个.hasMany关系通过";链接“;有效载荷中,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,假设我有两个模型,Topic和Post: App.Topic = DS.Model.extend({ posts: DS.hasMany('post', { async: true, inverse: 'post' }); }); App.Post = DS.Model.extend({ topic: DS.belongsTo('topic', { async: true }); }); Topic有许多帖子,一篇帖子属于一个主题 要从API加载数据,需要进行一次初始调用(例如获取一
Topic
和Post
:
App.Topic = DS.Model.extend({
posts: DS.hasMany('post', { async: true, inverse: 'post' });
});
App.Post = DS.Model.extend({
topic: DS.belongsTo('topic', { async: true });
});
Topic有许多帖子,一篇帖子属于一个主题
要从API加载数据,需要进行一次初始调用(例如获取一个主题…主题ID 2):
GET/topics/2
在收到此GET请求的有效负载后,序列化程序然后向有效负载附加一个links
键。这具有加载与主题关联的帖子的路径:
"topic": {
"id": 2,
"links": {
"posts": "/topics/2/posts"
}
}
第二个请求(到/topics/2/posts
)是如何加载帖子并将其附加到主题
当第一次加载页面时,这一切都可以正常工作
在页面会话期间创建帖子时会出现问题。虽然我可以让主题本身重新加载(通过对表示主题的模型对象调用.reload()
),但与主题关联的帖子不会重新加载。第二个API调用(获取帖子)从未进行过,而第一个API调用(仅获取主题)从未进行过。如果我刷新页面,我在上一次页面加载时创建的帖子将被加载(当然,如果我再去写一些帖子,它们在下一次页面加载之前不会显示)
在寻找解决方案时,我遇到了以下问题:
但是,该解决方案似乎不再适用于当前版本的余烬/余烬数据。提供的JSFIDLE不起作用
因此,如何重新加载此类hasMany关系?非常感谢您的帮助。因此,GitHub上有一个问题(截至今天)尚未解决:
我不知道如何让它重新加载,但我想我会分享解决这个问题的方法
我使用的是websocket,所以每当创建一篇新文章时,我都会通过websocket发送它,并使用数据更新收集
我知道这并不能解决Ember重新加载的问题,但我想对于已经使用WebSocket/Socket.io的用户来说,这是一个不错的解决方案。Hi@mike,我修复了坏掉的小提琴,请给我一个看起来像是重复我以前的问题对吗?可能重复的检查相关的github问题:包含您的问题的答案
DS.Model.reopen({
reloadLink: function (linkKey) {
if ($.isArray(linkKey)) {
var promises = [];
for (var i = 0; i < linkKey.length; i++) {
promises.push(this.reloadLink(linkKey[i]));
}
return Em.RSVP.all(promises);
} else {
var rel = this._relationships[linkKey];
if (rel) {
if (rel.reload) {
return rel.reload();
} else if (rel.fetchLink) {
return rel.fetchLink();
}
}
}
}
});
model: function () {
var model = this.modelFor('_some_model_');
return model.reloadLink(['link1', 'link2']).then(function () {
return model;
});
}