gpt4 book ai didi

javascript - Ember-data:DS.Store.createRecord 上的模型刷新

转载 作者:行者123 更新时间:2023-11-29 21:31:16 25 4
gpt4 key购买 nike

Emsters!

我想弄清楚为什么在我创建新记录并将其保存到商店后我的模型没有刷新。

我的路线按如下方式计算模型:

model: function (params) {
var postID = params.post_id,
userID = this.get('session.currentUser.id');

var post = this.store.findRecord('post', postID) ;

var followings = this.store.query('post-following', {
filter: { post: postID }
}) ;
var userFollowing = this.store.queryRecord('post-following', {
filter: { post: postID, user: userID }
}) ;

return new Ember.RSVP.hash({
post: post,
followings: followings,
userFollowing: userFollowing
});
}

然后我的模板呈现一个列表一个按钮:

{{#each model.followings as |following|}}
...
{{/each}}

{{#if model.userFollowing}}
<button {{action 'follow'}}>Follow</button>
{{else}}
<button {{action 'unFollow'}}>Unfollow</button>
{{/if}}

我的 Controller 创建/删除相关的post-following 记录:

actions: {
follow: function () {
var user = this.get('session.currentUser'),
post = this.get('model.post') ;

this.store.createRecord('post-following', {
user: user,
post: post
}).save();
},
unFollow: function () {
this.get('model.userFollowing').destroyRecord() ;
}
}

当我点击[Follow] 按钮时:

  • 发送成功的POST请求
  • 按钮更新
  • 列表更新

当我(然后刷新页面)单击[Unfollow] 按钮时:

  • 发送成功的DELETE请求
  • 按钮更新
  • 列表更新

你知道我做错了什么吗?
会不会是我的负载有问题?


编辑:已解决!

嗯,听起来我对 ember 的期望太高了。

框架不会在调用 store.createRecord('post-following', {...}) 时自动更新我的 post-following 数组。

然后我调整我的 Controller 逻辑以“手动”更新我的模型:

// in follow action…
userFollowing.save().then( function(){
var followings = store.query('post-following', {
filter: { post: postID }
}).then( function (followings) {
_this.set('model.userFollowing', userFollowing);
_this.set('model.followings', followings);
}) ;
});
// in unFollow action…
userFollowing.destroyRecord().then( function () {
_this.set('model.userFollowing', null);
_this.notifyPropertyChange('model.followings') ;
});

请注意,我的后端 API 设计受到了@duizendnegen 的批评(见评论)。 this article 中的更多最佳实践.

感谢您的帮助!!!
布鲁

最佳答案

对于这类问题,有一个更小的、可复制的问题真的很有帮助(例如通过 Ember Twiddle)

从根本上说,新的 post-following 记录与 filter 不匹配:它针对属性 { post: 123 } 进行过滤并且您的 post-following 对象包含 { post: { id: 123, name: ""} } 行中的内容。此外,您的 post-following 对象不包含名为 filter 的属性或它可能是什么 - 即它对服务器执行的查询与您想要的不同在客户端过滤。

我的方法是,作为对 followunfollow 操作的响应,更新 model userFollowingfollowings

关于javascript - Ember-data:DS.Store.createRecord 上的模型刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36406620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com