模型生命周期事件的订阅累积

时间:2013-08-13 11:47:05

标签: ember.js

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

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

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

我在这里做错了什么?

修改

根据model lifecyclerecord.on订阅了活动。当我想保存已编辑的记录时,我基本上会执行以下操作:

  • 更新模型数据,从视图中更新某些派生属性
  • 提交交易
  • 接受didUpdate事件,通知用户并执行最终清理

因此,每次我编辑记录时,我都会接受didUpdate事件。我预计这是一次性的嫌疑人。那就是:我承认,事件被解雇了,我处理它,完成并忘记了。

但也许Ember的做法不应该像这样工作。似乎每当我打电话给.on('didUpdate'时,旧的嫌疑人仍然会被记住。是这样吗?我不想这样做。我该怎么做其中一个:

  • 从当前记录中删除所有现有的嫌疑人
  • 或获得新记录,以便我可以从头开始接受事件。目前,我获得了this.get('content')
  • 的记录

1 个答案:

答案 0 :(得分:1)

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

  

删除所有现有订阅

至于取消订阅,您可以使用on的对应off来完成:http://emberjs.com/api/classes/Ember.Evented.html#method_off

希望这有帮助。