首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用StimulusJS和Quill编辑器陈旧的数据

用StimulusJS和Quill编辑器陈旧的数据
EN

Stack Overflow用户
提问于 2018-06-01 20:23:38
回答 1查看 384关注 0票数 0

我正在将Quill编辑器与Rails集成起来,并希望用StimulusJS来控制它。本质上,我在Rails表单上有一个字段,其中存储了html,它变成和Quill富文本编辑器。还有另外两个来自Quill的字段使用数据:纯文本(去掉标记)和delta(更改日志)。

然后,通过通常的表单submit将这三个文件保存到数据库中。

它几乎起作用了。

表单和控制器代码

代码语言:javascript
复制
<div data-controller='quill'>
      <%= f.input :target_note,
            input_html: {
              data: {
                target: 'quill.editor',
                action: "keyup->quill#update" } } %>
      <input data-target='quill.delta'/>
      <input data-target='quill.text' />
    </div>

刺激控制器

代码语言:javascript
复制
import { Controller } from "stimulus";

export default class extends Controller {
  static targets = ['editor','delta','text'];

  connect() {
    console.log('connected');
    this.quill = new Quill('#grammar_note_target_note', {
      theme: 'snow'
    });
  }

  update(){
    console.log(this.quill.getContents());
    console.log(this.quill.getText());
    this.textTarget.value = this.quill.getText();
    this.deltaTarget.value = this.quill.getContents();
  }
}

问题

当用户键入编辑器字段时,先前保存的数据将作为增量/纯文本复制到textTarget和deltaTarget字段。在下面的图像中,'asdasdasdsa‘的值以前保存在字段中,而用户只是键入'hhh’。

预期行为

在每次击键时,实际的文本将被转换为三角形或文本,并存储在这两个字段中。

任何帮助都会很感激的。*咧嘴笑:

编辑

@jhchen每次击键都会产生相同的原始数据。这些更改反映在屏幕上,但不反映在2输入或控制台中。

EN

回答 1

Stack Overflow用户

发布于 2018-06-02 19:48:23

好吧,我把一切都做好了,但我不是100%在StimulusJS上卖的。也许有更好的方法可以做到这一点,但这是我的解决方案:

javascript

代码语言:javascript
复制
import { Controller } from "stimulus";

export default class extends Controller {
  static targets = ['editor','html','text'];

  initialize() {
    this.quill = new Quill(this.editorTarget, {
      theme: 'snow'
    });
    this.quill.on("text-change", e => {
      this.textChange();
    });
 }

 textChange(){
    this.htmlTarget.value = this.quill.root.innerHTML;
    this.textTarget.value = this.quill.getText();
 }

}

视图

代码语言:javascript
复制
<div data-controller='quill'>
    <div data-target='quill.editor'>
      <% if f.object.target_note.present? %>
        <%= f.object.target_note.html_safe %>
      <% end %>
    </div>
    <%= f.input :target_note,
          label: false,
          input_html: {
            class: 'display-none',
            data: { target: 'quill.html' } } %>
    <%= f.input :target_note_text,
          label: false,
          input_html: {
            class: 'display-none',
            data: { target: 'quill.text' }
          } %>
  </div>

display-none类和需要的label: false类(如StimulusJS )不能针对隐藏的字段!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50650561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档