我有以下控制器:
export default Controller.extend({
/* model is an array of Posts */
didDeletePost(post) {
/* PROBLEM HERE : post is an InternalModel */
this.get('model').removeObject(post);
/* do other stuff with post */
},
actions: {
markPostForDelete(post) {
post.markForDelete(); /* starts a timer */
post.one('didDelete', this, this.didDeletePost);
},
clearMarkPostForDelete(post) {
post.clearMarkForDelete(); /* cancel a timer which will destroyRecord */
post.off('didDelete', this, this.didDeletePost);
}
}
});
但是从post
中的model
移除didDeletePost
不起作用,因为post
参数是InternalModel
,而不是DS.Model
我怎样才能做到这一点?
因为这样做似乎不容易,我想应该有更好的方法来实现这种计时器?
答案 0 :(得分:0)
实际上,您不需要从model
删除帖子。
请查看我提供的小提琴:https://ember-twiddle.com/25de9c8d217eafe03aea874f8eefb0fd
答案 1 :(得分:0)
根据我的经验以及其他人告诉我的事情,倾听事件而不是调用行动/功能可能会给你带来非常混乱的事件链(这似乎就是这个例子,至少对我而言)。
我会稍微用标志手动执行此操作(为简单起见,这是模型中的所有示例,您可能需要根据其他交互移动到控制器):
export default DS.Model.extend({
markPostForDelete() {
this.set('marked', true).then( () => /*function in model to start timer and then call this.deleteMarked() */);
},
clearMarkPostForDelete() {
this.set('marked', false)
},
deleteMarked() {
if(this.get('marked')) {
this.destroyRecord();
}
}
}); /* end of model */