如何在Elm lang 0.17中实现取消公告的autosave?

如何在Elm lang 0.17中实现取消公告的autosave?,elm,autosave,debouncing,Elm,Autosave,Debouncing,我有以下情况: 当用户停止在文本区域中键入时,我想等待2秒钟,如果用户在这2秒钟内没有更改文本区域中的任何内容,我想将文本区域的内容保存到服务器。如果用户在这2秒内更改了文本区域中的某些内容,我想重新启动等待超时 在JavaScript中,我将实现如下内容 //Html //JavaScript var textarea=document.querySelector('#textarea'); var textValue=“”; textarea.oninput=函数(e){ textValu

我有以下情况:

当用户停止在文本区域中键入时,我想等待2秒钟,如果用户在这2秒钟内没有更改文本区域中的任何内容,我想将文本区域的内容保存到服务器。如果用户在这2秒内更改了文本区域中的某些内容,我想重新启动等待超时

在JavaScript中,我将实现如下内容

//Html
//JavaScript
var textarea=document.querySelector('#textarea');
var textValue=“”;
textarea.oninput=函数(e){
textValue=e.target.value;
setSaveTimeout();
}
让保存超时;
函数setSaveTimeout(){
如果(保存超时){
clearTimeout(保存超时);
}
saveTimeout=setTimeout(saveToServer,2000);
}
函数saveToServer(){
document.querySelector(“#server”).innerText=
'保存到服务器的值:'+textValue;
}

实现该行为的一种方法是

  • 钩子
    onInput
    事件
  • onInput
    处理程序中, 创建一个2秒后触发的任务, 当前值为textarea。 还存储textarea内容
  • 检查该值是否已更改 已更改或未更改,如果值未更改,则将其保存
  • 在这里,它不会取消
    任务
    ,因此可能效率不高

    --模型
    类型别名模型=
    {str:String
    ,已保存:字符串
    }
    初始化:(模型,Cmd Msg)
    初始化=
    (型号“”,Cmd.none)
    --更新
    输入味精
    =更改文本字符串
    |保存字符串
    |努普()
    更新:Msg->Model->(Model,Cmd-Msg)
    更新msg模型=
    味精案例
    NoOp->(型号,命令无)
    保存str->
    让
    _=Debug.log“save”str
    新模型=
    如果model.str/=str
    然后模型
    else{model | saved=str}
    in(新型号,Cmd.none)
    changetextstr->
    让
    _=Debug.log“textarea”str
    cmd=Task.perform NoOp Save Task.success str
    in({model | str=str},cmd)
    --看法
    查看:模型->Html消息
    视图模型=
    Html.div[]
    [Html.textarea[onInput ChangeText][]
    
    ,Html.div[][Html.text实现该行为的一种方法是

  • 钩子
    onInput
    事件
  • onInput
    处理程序中, 创建一个2秒后触发的任务, 当前值为textarea。 还存储textarea内容
  • 检查该值是否已更改 已更改或未更改,如果值未更改,则将其保存
  • 在这里,它不会取消
    任务
    ,因此可能效率不高

    --模型
    类型别名模型=
    {str:String
    ,已保存:字符串
    }
    初始化:(模型,Cmd Msg)
    初始化=
    (型号“”,Cmd.none)
    --更新
    输入味精
    =更改文本字符串
    |保存字符串
    |努普()
    更新:Msg->Model->(Model,Cmd-Msg)
    更新msg模型=
    味精案例
    NoOp->(型号,命令无)
    保存str->
    让
    _=Debug.log“save”str
    新模型=
    如果model.str/=str
    然后模型
    else{model | saved=str}
    in(新型号,Cmd.none)
    changetextstr->
    让
    _=Debug.log“textarea”str
    cmd=Task.perform NoOp Save Task.success str
    in({model | str=str},cmd)
    --看法
    查看:模型->Html消息
    视图模型=
    Html.div[]
    [Html.textarea[onInput ChangeText][]
    
    ,Html.div[][Html.text显然是Elm中的
    setTimeout
    等价物。我能够找到使用它进行去盎司的方法,但我不确定这是否是最好的方法。此外,下面是一个来自用户组讨论如何去盎司的线程:
    setTimeout
    显然是Elm中的等价物。我能够找到使用它进行去盎司的方法反弹,但我不确定这是否是最好的方法。此外,下面是一个来自用户组的线程,讨论如何消除反弹:
    // Html
    <textarea id="textarea"></textarea>
    <pre id="server"></pre>
    
    // JavaScript
    var textarea = document.querySelector('#textarea');
    
    var textValue = "";
    textarea.oninput = function (e) {
      textValue = e.target.value;
      setSaveTimeout();
    }
    
    let saveTimeout;
    function setSaveTimeout() {
      if (saveTimeout) {
        clearTimeout(saveTimeout);
      }
      saveTimeout = setTimeout(saveToServer, 2000);
    }
    
    function saveToServer() {
      document.querySelector('#server').innerText =
        'Value saved to server: ' + textValue;
    }