2017-07-16 72 views
0

我正在使用文本输入字段列表构建重新框架应用程序。我想这样做的行为是,当用户按RETURN时,会创建一个新行并将焦点放在新行上。我已经成功地创造新行,但是,当我尝试内change-focus事件处理程序使用该调用将焦点更改到新行:Clojurescript重新框架:将焦点更改为新创建的元素

(.focus (.getElementById js/document focus-element))

我得到一个错误:Cannot read property 'focus' of null

我认为这是因为该视图尚未呈现新创建的行。使用重新框架将重点转向新元素的最佳方式是什么?

我应该把活动行放在我的状态原子中并在视图中渲染它吗?或者在视图渲染后可能触发另一个事件?我喜欢一些输入。

回答

0

如果您的表单中添加的每一行都是组件,那么您可以在生命周期回调中设置处理程序componentDidMount。它将在组件已经被渲染后被调用。要做到这一点在re-frame你应该使用reagentcreate-class

(defn my-row [input-id] 
    (reagent/create-class 
    {:component-did-mount 
    #(.focus (.getElementById js/document input-id)) 
    :reagent-render 
    (fn [input-id] 
     [:div.form-group 
     [:input.form-control {:id input-id, :type "text"}]])})) 

你可以尝试用React.JS裁判或reagent/dom-node,而不是在componentDidMount处理函数中使用JS互操作的代码打。