【问题标题】:Autosaving on blur + "Undo" button模糊自动保存+“撤消”按钮
【发布时间】:2013-03-29 04:11:10
【问题描述】:

我正在编写指令,它的作用如下:

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

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

我唯一遇到的问题是当我按下“撤消”按钮时,DIV 失去焦点(因此触发了 'focusout' 事件)并且值保存在模型中,因此“撤消”按钮无法恢复其值。

(我单击“撤消”-> 聚焦事件(自动保存)-> 单击事件(???无法还原))

我看到的可能解决方法:

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

有人对这种行为有解决方案吗(模糊时自动保存+撤消按钮)?

【问题讨论】:

  • 我认为您将不得不忍受两次数据库写入(解决方法#2)。由于您不知道用户是否会点击“撤消”,因此如果您需要自动保存行为,则必须先保存更改的值。希望撤消操作很少见,因此双 DB 写入也是如此。
  • 你看到了吗? stackoverflow.com/questions/13320015/…可以帮你自动保存

标签: angularjs angularjs-directive


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-08-23
    • 2011-02-24
    • 2016-06-22
    • 2013-05-10
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多