2017-07-16 74 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互操作的代碼打。