Elm 有没有办法以编程方式清除输入';s值而不将其绑定到模型?

Elm 有没有办法以编程方式清除输入';s值而不将其绑定到模型?,elm,Elm,当我需要以编程方式控制输入值(例如清除输入值或将其设置为默认值)时,我必须将模型中的值绑定到输入值。这在模型和输入之间创建了一个双向绑定,这在某些场景中会导致问题。特别是,如果我有一个大量使用DOM的应用程序,使用这种双向绑定快速键入输入可能会错过击键 ,使用输入事件更新模型。注意,在本例中,我对元素的值没有编程控制 。这里输入事件更新模型,然后更新输入的值。这种双向绑定并不理想 所以我的问题是:有没有一种方法可以通过编程清除输入值,而无需将其绑定到模型,而无需借助端口之类的黑客手段?在我所见过

当我需要以编程方式控制输入值(例如清除输入值或将其设置为默认值)时,我必须将模型中的值绑定到输入值。这在模型和输入之间创建了一个双向绑定,这在某些场景中会导致问题。特别是,如果我有一个大量使用DOM的应用程序,使用这种双向绑定快速键入输入可能会错过击键

,使用输入事件更新模型。注意,在本例中,我对元素的值没有编程控制

。这里输入事件更新模型,然后更新输入的值。这种双向绑定并不理想


所以我的问题是:有没有一种方法可以通过编程清除输入值,而无需将其绑定到模型,而无需借助端口之类的黑客手段?

在我所见过的所有情况下,人们都会报告DOM密集型应用程序的运行缓慢,它是在Reactor(默认情况下编译w/--debug)下运行的,或者以调试模式显式运行。在非调试模式下运行已经消除了它

在复杂的情况下,使用Html.Lazy和Html.Keyed


要回答在DOM元素上设置模型中未反映的值的特定问题。。。我看不出一种纯榆树茶的做法。(我想你可以使用动画帧来装配一个机制,但这似乎比它的价值要麻烦得多。)

在我所见过的所有情况下,人们都会报告DOM应用程序的运行缓慢,它是在Reactor下运行的(默认情况下编译w/--debug),或者在debug模式下显式运行。在非调试模式下运行已经消除了它

在复杂的情况下,使用Html.Lazy和Html.Keyed


要回答在DOM元素上设置模型中未反映的值的特定问题。。。我看不出一种纯榆树茶的做法。(我想您可以使用动画帧装配一个机制,但这似乎比它的价值要麻烦得多。)

一个选项是在您的模型中包含一个布尔值,例如,称为
cleared
。如果清除为True,则在视图函数中,将输入字段的
绑定到空字符串。否则,不要包含显式的
绑定:

 input (if model.cleared then [value ""] else []) []

更新
中,当您想清除输入时,将
清除
设置为True;当文本框获得焦点时(使用
onFocus
),将其设置回False。

一个选项是在模型中包含一个名为
cleared
的布尔值。如果清除为True,则在视图函数中,将输入字段的
绑定到空字符串。否则,不要包含显式的
绑定:

 input (if model.cleared then [value ""] else []) []

更新
中,当您想清除输入时,将
清除
设置为True;当文本框获得焦点时(使用
onFocus
),将其设置回False。

如果您只需要清除输入文本,请查看以下内容:


基本概念是没有
值模型
绑定,除非
模型==”
。这是前面描述的@alex lew解决方案的一个变体,但是没有引入特殊标志,
model==”
本身就是特殊标志。

如果您只需要清除输入文本,请查看以下内容:


基本概念是没有
值模型
绑定,除非
模型==”
。这是前面描述的@alex lew解决方案的一个变体,但是没有引入特殊标志,
model==”
本身就是特殊标志。

我将尝试一下,看看感觉如何!不确定它是否真的比使用端口少了多少黑客,但这里有一个工作演示:-)我将尝试一下,看看它的感觉如何!我不确定它是否真的比使用端口更简单,但这里有一个工作演示:-)是的,我在打开chrome调试器时特别注意到了这一点。但这有关系吗?它导致了非确定性行为,打破了抽象。行动迟缓是一回事;我关心的是被破坏,即使只是在极端情况下,这不是浏览器的调试器;它是Elm自己的调试机制,打开时存储每个交互以进行可能的重播,然后运行到带有内存的问题中。如果在消除--debug之后问题仍然存在,在我看到有人使用Html.Lazy并报告了良好的结果的情况下。当我观察到此行为时,我没有启用Elm的调试器。我假设您知道以下内容,但为了区别:使用Elm“调试器”与使用--debug标志编译Elm是不同的。后者可能导致与内存相关的缓慢,而elm reactor默认运行w/--debug。因此,回到前面,如果您已经消除了调试作为问题的根源,下一步将是使用Html.Keyed/Lazy进行调查。是的,我在打开chrome调试器时特别注意到了这一点。但这有关系吗?它导致了非确定性行为,打破了抽象。行动迟缓是一回事;我关心的是被破坏,即使只是在极端情况下,这不是浏览器的调试器;它是Elm自己的调试机制,打开时存储每个交互以进行可能的重播,然后运行到带有内存的问题中。如果在消除--debug之后问题仍然存在,在我看到有人使用Html.Lazy并报告了良好的结果的情况下。当我观察到此行为时,我没有启用Elm的调试器。我假设您知道以下内容,但为了区别:使用Elm“调试器”与使用--debug标志编译Elm是不同的。后者可能导致与内存相关的缓慢,而elm reactor默认运行w/--debug。那么,回到,如果您已经消除了--调试作为下一步问题的来源