自动保持模糊+"撤消"按钮

Val*_*nov 6 angularjs angularjs-directive

我正在写指令,这将是这样的:

  1. 允许编辑某些文本(使用可编辑的内容)
  2. 在失去焦点时,它应该将其价值保存到模型中(最近观看并保存到DB)
  3. 应该有按钮"撤消",它可以恢复更改.

我的实现是:http://plnkr.co/edit/DsWEYQV4j51i4GO6KjSe?p = preview

我唯一的问题是当我按下"撤消"按钮,DIV失去焦点(因此'焦点'事件被触发)并且值保存在模型中,因此"撤消"按钮无法恢复其值.

(我点击"撤消" - >聚焦事件(自动保存) - >点击事件(???无法恢复))

我看到可能的解决方法:

  1. 在模糊时设置超时,如果按下"撤消"按钮则取消它.但它很丑陋,因为用户可以输入值并导航到应用程序的其他部分,因此定时保存不会运行任何$ watch监听器.
  2. 保存focusin上的值并在保存"撤消"按钮时恢复它.这导致另一个问题:$ watch侦听器将以更改的值运行,然后再次使用以前的值运行(因此将有2次写入DB而不是一次)

有没有人有这种行为的解决方案(自动保存模糊+ undobutton)?

Ket*_*tan 1

如何使用 underscore.js debounce 函数或类似函数来导致自动保存延迟,它将检查撤消标志并取消?不确定 $watch 听众在做什么。当然,如果用户完全退出应用程序或刷新页面等,它仍然不起作用。