3

editorState でいくつかのトリッキーな状態の変更を行っていますが、選択が失われています。

currentText() を取得し、魔法のライブラリを使用して HTML に変換し、それを editorState に戻す必要があります。それはうまくいきます、それは非常に壊れる選択です。

現在、最初の最初に選択を取得してから実行しようとしてforceSelectionいますが、関連するエラーで失敗しますselection.hasFocus()(実際には関連していないようです...)。

アンカーとオフセットに基づいて「新しい」選択を計算する必要があると思いますが、それを行うためのアイデアはありませんか?

今私のコードは次のようになります:

// onChangeHandler:

const currentContentState = editorState.getCurrentContent()
const selectionState = editorState.getSelection()

const plainHtml = magicOperation(currentContentState.getPlainText())

const currentContentBlocks = convertFromHTML(plainHtml)
const contentState = ContentState.createFromBlockArray(currentContentBlocks)

const newEditorState = EditorState.createWithContent(contentState)

this.setState({
  editorState: EditorState.forceSelection(
    newEditorState,
    selectionState
  )
})

ハックです。私は DraftJS をいじっているだけだとわかっています。それを達成できれば、スムーズに動作させる場合は、間違いなく Decorator を使用して、editorState 内に HTML を追加します。

御時間ありがとうございます!

4

1 に答える 1

3

selectionStateにはブロック キー (anchorKey&focusKey) が含まれます。ブロック全体を置き換えるため、キーが変更されました。あなたがする必要があるのは、オフセットからキーを見つけて、それを新しいselectionStateに設定してから、新しいeditorStateに適用することです。

プレーンテキストをhtmlに変換して元に戻す必要がある理由は興味深いです。

于 2016-08-04T03:03:00.783 に答える