0

更新记录时,我执行以下操作:

...
this.transaction.commit();
entry.on("didUpdate", this.afterSave.bind(this, success_msg));

但是我的函数afterSave在运行循环中“累积”(没有更好的方式来描述它)。也就是说,我第一次编辑记录时,afterSave会调用一次。第二次,它被调用两次,以此类推。

我在这里做错了什么?

编辑

根据模型生命周期record.on订阅事件。当我想保存已编辑的记录时,我基本上会执行以下操作:

  • 更新模型数据,更新视图中的一些派生属性
  • 提交事务
  • 订阅didUpdate事件,通知用户并执行一些最终清理

因此,每次我编辑记录时,我都会订阅该didUpdate事件。我预计这是一次性订阅。那就是:我订阅,事件被触发,我处理它,完成并忘记。

但也许 Ember 实践不应该像这样工作。看来我每次打电话.on('didUpdate'的时候,旧的订阅号都还记得。是这样吗?我不想这样做。我该怎么做其中之一:

  • 从当前记录中删除任何现有订阅
  • 或获取新记录,以便我可以从头开始订阅事件。目前我得到了记录this.get('content')
4

1 回答 1

1

我想避免累积订阅,您应该使用onehttp ://emberjs.com/api/classes/Ember.Evented.html#method_one作为一次性订阅。one订阅一个命名的函数event,然后在第一次触发事件后取消订阅。

删除任何现有订阅

至于取消订阅,您可以使用on' 的对应项offhttp ://emberjs.com/api/classes/Ember.Evented.html#method_off

希望这可以帮助。

于 2013-08-13T12:53:00.000 回答