3

スプレッドシートのようなテーブルを作成するために purescript-halogen を使用しています ( Handsontableに似ています)。セルをダブルクリックすると、html 入力要素がそれぞれのテーブル セルの子としてレンダリングされます (そのような要素は他のすべてのセルに対してレンダリングされません)。

これは、新しく作成された入力要素にフォーカスを自動的に設定する方法がわからないことを除いて、ハロゲンで非常にうまく機能します。

属性を試しましたautofocusが、これはダブルクリックされた最初のセルに対してのみ機能します。JavaScript のやり方focus()は新しい要素でメソッドを呼び出すことですが、DOM がハロゲンで更新された後に呼び出す方法がわかりません。何か案は?

4

1 に答える 1

5

Initializerさて、フィルのヒントを使って私がやった方法は次のとおりです。

要素に実際にフォーカスする JavaScript 関数を作成します。

exports.setFocusImpl = function(elemId) {
  return function() {
    document.getElementById(elemId).focus();
  };
};

それをFFI。

foreign import data FOCUS :: !

foreign import setFocusImpl :: forall e. Fn1 String (Eff (focus :: FOCUS | e) Unit)

setFocus :: forall e. String -> Eff (focus :: FOCUS | e) Unit
setFocus = runFn1 setFocusImpl

そしてsetFocus、初期化子で関数を使用します。

H.input
[ A.id_ "inputField"
, A.Initializer do
    liftEff $ setFocus "inputField"
    pure DoNothing
] [ ]

署名がまだ古いものである古いバージョンのハロゲンを使用していることに注意してください(in 30e8b2c7の定義Initializer)。

于 2015-08-31T07:23:49.357 に答える