Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 对模型生命周期事件的订阅会累积_Ember.js - Fatal编程技术网

Ember.js 对模型生命周期事件的订阅会累积

Ember.js 对模型生命周期事件的订阅会累积,ember.js,Ember.js,更新记录时,我会执行以下操作: ... this.transaction.commit(); entry.on("didUpdate", this.afterSave.bind(this, success_msg)); 但是我的函数afterSave在运行循环中“累积”(没有更好的方法来描述它)。也就是说,我第一次编辑记录时,afterSave被调用一次。第二次,它被调用两次,以此类推 我做错了什么 编辑 根据,记录。on订阅事件。当我想保存已编辑的记录时,我基本上会执行以下操作: ... t

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

...
this.transaction.commit();
entry.on("didUpdate", this.afterSave.bind(this, success_msg));
但是我的函数
afterSave
在运行循环中“累积”(没有更好的方法来描述它)。也就是说,我第一次编辑记录时,
afterSave
被调用一次。第二次,它被调用两次,以此类推

我做错了什么

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

...
this.transaction.commit();
entry.on("didUpdate", this.afterSave.bind(this, success_msg));
  • 更新模型数据,更新视图中的某些衍生特性
  • 提交事务
  • 单击
    didUpdate
    事件,通知用户并执行一些最终清理
因此,每次编辑记录时,我都会使用
didUpdate
事件。我原以为这是一次征召。也就是说:我支持,事件被触发,我处理它,完成和忘记

但也许余烬的做法不应该像这样工作。似乎每次调用('didUpdate'上的
.on('didUpdate'
时,我都会记住旧的脚本。是这样吗?我不想这样做。我如何才能执行以下操作之一:

  • 从当前记录中删除任何现有订阅
  • 或者获取一个新的记录,这样我就可以从头开始记录事件。目前我使用
    this.get('content')

我想为了避免订阅的累积,您应该使用
one
:作为一次性订阅。
one
向命名的
事件
订阅函数,然后在第一次触发事件后取消订阅

删除任何现有订阅

至于退订,您可以使用
打开
的对应
关闭


希望这能有所帮助。

当您使用一个没有像
条目那样的
绑定的简单回调时,是否也会发生这种情况。在(“diddupdate”,function(){console.log('diddupdate')};
?@inuitivepixel:是的,简单函数也会发生这种情况。是的,
一个
就是所需要的!谢谢!