【发布时间】:2013-03-29 04:11:10
【问题描述】:
我正在编写指令,它的作用如下:
- 允许编辑某些文本(使用内容可编辑)
- 在失去焦点时,应将其价值保存到模型(最近观看并保存到 DB)
- 应该有一个“撤消”按钮来恢复更改。
我的实现是:http://plnkr.co/edit/DsWEYQV4j51i4GO6KjSe?p=preview
我唯一遇到的问题是当我按下“撤消”按钮时,DIV 失去焦点(因此触发了 'focusout' 事件)并且值保存在模型中,因此“撤消”按钮无法恢复其值。
(我单击“撤消”-> 聚焦事件(自动保存)-> 单击事件(???无法还原))
我看到的可能解决方法:
- 设置模糊超时并在按下“撤消”按钮时取消它。但这很丑,因为用户可以输入值并导航到应用程序的其他部分,因此超时保存不会运行任何 $watch 侦听器。
- 保存焦点值并在保存“撤消”按钮时恢复它。这会导致另一个问题:$watch 侦听器会以更改的值运行,然后以之前的值再次运行(因此会有 2 次写入 DB 而不是 1 次)
有人对这种行为有解决方案吗(模糊时自动保存+撤消按钮)?
【问题讨论】:
-
我认为您将不得不忍受两次数据库写入(解决方法#2)。由于您不知道用户是否会点击“撤消”,因此如果您需要自动保存行为,则必须先保存更改的值。希望撤消操作很少见,因此双 DB 写入也是如此。
-
你看到了吗? stackoverflow.com/questions/13320015/…可以帮你自动保存
标签: angularjs angularjs-directive