Я хочу видеть текстовое поле в Rails ТОЛЬКО, как это делает javascript

У меня есть форма, которая позволяет пользователю отправлять HTML, и я просто хочу внести несколько изменений в текст (например, заменить название компании на одно в Active Record), а затем заменить HTML внутри текстового поля. Однако играет не очень хорошо. По какой-то причине попытка заменить текстовое поле содержимым, которое было отправлено в его запросе POST, не работает. Ничего не произошло.

Вот моя форма просмотра:

<div class = "modal-body">
    <div class = "form-group row">
        <div class = "col-sm-12">
            <%= form_tag(convert_email_template_path(format: :js), method: :post, :authenticity_token => true, id: 'importEmailForm', remote: true) do %>
            <%= text_area_tag 'import_email', nil, rows: 10, placeholder: "Paste the headers of your email here.", class: "form-control" %>
            <% end %>
        </div>
    </div>
</div>
<div class = "modal-footer">
    <%= link_to '<i class = "fa fa-download"></i> Import'.html_safe, '#', onclick: "importEmail();", class: "btn btn-success btn-sm" %>
</div>

В общем, importEmail () выглядит так:

function importEmail() {
   setTimeout(function () { 
    $.ajax({
      type: 'POST',
      url: $("#importEmailForm").attr("action"),
      data: $("#importEmailForm").serialize(), 
    });
  }, 100)
};

который в основном отправляет форму в представление. Мне нужно захватить эти данные POST, внести одно или два изменения, а затем продолжить замену textarea измененным содержимым.

Теперь, если я сделаю это на простом javascript, это будет нормально:

#views/templates/convert_email.js.erb

var sourceBody = $('#import_email').val();
var start_position = sourceBody.indexOf("<html>");
var stop_position = sourceBody.indexOf("</html>");
var html = sourceBody.substring(start_position, stop_position);
var fixed_html = html.replace(/(=\n)/g, '');

// Grab body.    
var iframe = document.getElementsByClassName("fr-iframe")[0]
var innerDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;

// get the element in question
const input = innerDoc.getElementsByTagName("body")[0];

// Before pasting data, let's make sure the code view is turned OFF.
if ($('textarea').froalaEditor('codeView.isActive') == true) {
    $('textarea').froalaEditor('codeView.toggle');
}

// dispatch keyboard events
input.innerHTML = fixed_html;

// Close modal.
$('#Modal').modal('toggle')

Но если захватить эти данные POST с помощью params[:import_email] и сделать что-то вроде этого:

#controllers/templates.rb
body = params[:import_email]
@body = body.gsub("=\n", "")

и передайте это в представление javascript.

#views/templates/convert_email.js.erb
// Grab body.    
var iframe = document.getElementsByClassName("fr-iframe")[0]
var innerDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;

// get the element in question
const input = innerDoc.getElementsByTagName("body")[0];

// log codeview status
var codeView = 0

// Before pasting data, let's make sure the code view is turned OFF.
if ($('textarea').froalaEditor('codeView.isActive') == false) {
    codeView = 0;
    $('textarea').froalaEditor('codeView.toggle');
} else {
    codeView = 1;
}

function
// dispatch keyboard events
input.innerHTML = "<%= @body %>";

resizeFroala();

// Close modal.
$('#Modal').modal('toggle')

Ничего не произошло. Возможно, есть способ рассматривать текстовое поле как исходный код или что-то в этом роде?

При использовании первого метода (только javascript) fixed_html выглядит в консоли так:

Я хочу видеть текстовое поле в Rails ТОЛЬКО, как это делает javascript

Я хочу, чтобы @body выглядел так, но для этого мне нужно сделать это в контроллере:

body = params[:import_email]
@body = body.gsub("=\r", "\r").gsub("\n", "").gsub("\r", "").gsub("\t", "")

но попытка записать это в консоль выглядит так:

Я хочу видеть текстовое поле в Rails ТОЛЬКО, как это делает javascript

Извините за путаницу. Надеюсь, это имеет смысл. Я просто хочу делать то, что безупречно работает в Javascript, но в Rails.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
65
1

Ответы 1

Думаю, я наконец понял это. Не понял, что рельсы использовали <%== %> в дополнение к <%= %>

Изменил мой код на:

input.innerHTML = "<%== j @body %>";

и это помогло. Вот это да.

Другие вопросы по теме