我有一个自定义组件作为输入(在我的应用程序中它做了更多的事情,但我想保持相同的结构,所以我将原生输入包装到组件中)。
然后,当用户更改输入的值时,我调用闭包操作来格式化用户提供的值(例如我将其大写),并将其设置为某个属性(在输入中应该对用户可见)。
当我粘贴一些小写的字符串(例如abc
),然后没有删除或添加任何内容时,问题就发生了我只需选择所有内容并从剪贴板粘贴(再次abc
)。在第二次粘贴时,调用格式化闭包动作,甚至调用属性的setter(我已尝试使用自定义set
计算属性),但我的组件的输入保持未格式化。
我提供了最小的Ember Twiddle:https://ember-twiddle.com/5448bb455fd8732cc87f6ed8f2d44c12
答案 0 :(得分:0)
该值在application controller
的操作处理程序中更新。在该处理程序中,调用toUpperCase
并将结果设置为a
。
在第二次通话中,由于a
未更改,value
的{{1}}不会更改。因此组件不会重新渲染。粘贴的价值将保持不变。
您可以通过向my-input
添加{{log (concat 'test' a)}}
行来观察此情况。它只会打印一次。
要使其正常工作:将制作application.hbs
逻辑放到uppercase
组件中。它会简单地工作。看看this twiddle,你可以实现类似的组件。