我有一个组件,其子组件是&#34;编辑器&#34;:子组件显示<span>
或<input>
。点击较大的组件,我想切换编辑器的编辑状态。
我首先想到的方法是在容器组件中有一个动作,它将动作发送给子组件。 (这可以修改为让父母的动作设置一个属性,该属性通过把手绑定并在子组件中观察 - 我猜这将更接近&#34; ember方式&#34;但不一定相关问题。)
问题在于:编辑器组件使用&#34; focusOut&#34;作为停止编辑的信号。如果这是在点击之前,则父母的状态切换回切换回&#34;编辑&#34;模式。
(注意:编辑器子组件在其他几个地方使用。我喜欢一种解决方案,使其尽可能分离。)
我想过设置一个&#34; wasEditing&#34;编辑器中的属性,我在停止编辑后设置,然后在&#34; next&#34;中清除。但是,我猜不能保证行动的顺序? (或者即使有,它似乎依赖于实现细节。)
解决此问题的最佳方法是什么?我应该选择&#34; wasEditing&#34;另外make&#34; focusOut&#34;幂等(即如果已经不编辑则什么都不做)?如果是这样,是否有一个很好的钩子用于清除&#34; wasEditing&#34;保证在所有行动之后?
更新:根据kingpin2k的优秀示例,我实施了一个解决方案:http://emberjs.jsbin.com/punuleci/2/edit
这是基于设置&#34;刚关闭&#34;标志,禁用重新打开,然后在延迟后清除。不过,我更喜欢更好的方式,并不依赖于任意延迟。