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

时间:2017-05-06 18:59:16

标签: elm

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

Here's an example of a one-way binding,使用输入事件更新模型。请注意,在此示例中,我没有对元素值的编程控制。

Here's an example of the aforementioned 2-way binding scenario。这里输入事件更新模型,然后更新输入的值。这种双向绑定并不理想。

所以我的问题是:有没有办法以编程方式清除输入的值而不将其绑定到模型而不诉诸像端口这样的hacky?

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

如果你只需要清除输入文字,请看一下:https://ellie-app.com/4mxTRZqRxa1/0

基本概念是除value model之外没有model == ""绑定。它是以前描述的@ alex-lew解决方案的变体,但不是引入特殊标志,model == ""本身就是特殊标志。

答案 2 :(得分:0)

在所有情况下,我都看到人们在DOM重型应用程序中报告缓慢,它一直在Reactor(默认编译w / --debug)下运行,或者以其他方式明确在调试模式下运行。在非调试模式下运行已经消除了它。

在粗糙的情况下,请使用Html.Lazy和Html.Keyed。

回答你在DOM元素上设置一个未在模型中反映的值的具体问题......我没有看到纯粹的榆树TEA方法。 (我想你可以使用动画帧来装配机制,但它似乎比它的价值更麻烦。)