Подменю TinyMCE отображаются в верхней части экрана, когда редактор находится в модальном переполнении стека.

#javascript #reactjs #tinymce #react-modal

#javascript #reactjs #tinymce #реагировать-модальный

Вопрос:

Я использую TinyMCE 5.0.2 (самостоятельно размещенный) и добавляю редактор через официальный компонент TinyMCE React. Я поместил свой редактор в модальный, созданный с помощью React Modal. Проблема в том, что все подменю отображаются в верхней части экрана (исправлено), а не относительно пункта меню.

У кого-нибудь есть идеи о том, как это исправить?

введите описание изображения здесь

Я запустил здесь JSFiddle, но я не могу заставить ReactTinymce принимать реквизиты так, как это происходит в обычном проекте в скрипке. (Метод ReactTinyMCE onEditorChange не запускается, и значение не устанавливается, я предполагаю, что я неправильно его использую, но скрипты иногда странные …)

https://jsfiddle.net/cleanshooter/9qutaz3o/60/

 const modalStyle = {
  content : {
    top                   : '25%',
    left                  : '25%',
    right                 : 'auto',
    bottom                : 'auto'
  }
};

class View extends React.Component {
    constructor(props) {
    super(props);
    this.state = {
      isModalOpen: false,
      content: 'Init'
    };
    this.updateContent = this.updateContent.bind(this);
  }

  openModalHandler() {
    this.setState({isModalOpen: true});
  }

  closeModalHandler() {
    this.setState({isModalOpen: false});
  }

  updateContent(value) {
    console.log('changed: ', value);
    this.setState({content: value})
  }

    render() {

    return (
    <div>
      <h2>TinyMCE in a React-Modal Example</h2>
      <button onClick={this.openModalHandler.bind(this)}>Open modal</button>
      <ReactModal 
        isOpen={this.state.isModalOpen}
        style={modalStyle}
        onRequestClose={this.closeModalHandler.bind(this)}>
        <ReactTinymce
          value={this.state.content}
          onEditorChange={value => this.updateContent(value)}
        />
        <button onClick={this.closeModalHandler.bind(this)}>Close</button>
      </ReactModal>
    </div>
    )
  }
}

ReactModal.setAppElement('#app')
ReactDOM.render(<View name="React" />, document.getElementById('app'));
 

Ответ №1:

В TinyMCE 5 всплывающих окон находятся внутри элемента, прикрепленного к концу тела. Их позиция вычисляется так, чтобы она совпадала с контейнером редактора при их открытии.

Я не знаком с React Modal, но вполне возможно, что-то в стилях мешает нашим вычислениям позиции. Можете ли вы создать образец страницы для нашего исследования (возможно, используя одну из демонстрационных страниц react modal)?

Похоже, это ошибка, если бы вы могли зарегистрировать тикет на github с образцом страницы, это было бы здорово.

Комментарии:

1. образец создан и добавлен в вопрос… однако нужна помощь с компонентом ReactTinymce… не работает должным образом.

2. Меню TinyMCE в скрипке выглядят нормально, связано ли это с проблемами ReactTinymce, которые у вас возникают? Обратите внимание, что вы не используете официальный пакет TinyMCE react на этой странице. Существует несколько пакетов, которые утверждают, что предлагают поддержку TinyMCE в react, к сожалению, выбор правильного может быть довольно запутанным.

3. что ТАКОЕ официальный пакет TinyMCE react?

4. Тот, который вы указали в своем вопросе: @tinymce / tinymce-react github.com/tinymce/tinymce-react

5. аааа… ну, unpkg — это CDN для всего в NPM, и, как вы можете видеть, я использую уменьшенный дистрибутив для версии 0.7.0. Вот почему я спрашиваю при использовании JSFiddle, что такое «официальный пакет», если он не тот, который был выпущен в NPM?