Добавление элемента на страницу в VoltRb

Я пытаюсь добавить элемент на одну из моих страниц в проекте Volt через opal-browser, например так:

if RUBY_PLATFORM == 'opal'
  require 'browser'
  $document.body << my_dom_element.to_n
end
# controller code below

К сожалению, я получаю сообщение об ошибке:

[Error] TypeError: null is not an object (evaluating 'value.nodeType')
    (anonymous function) (main.js, line 7772)

Элемент DOM, который я добавляю, идеально звучит. Это просто следующий код:

document.createElement( 'myElement' )

Я предполагаю, что Volt не любит, когда я добавляю элементы на страницу в контроллере, а не создаю их вручную в HTML-файле представления. Есть ли способ, которым я могу обойти это? Мне нужно сделать это с добавлением элементов для совместимости с другой библиотекой, которую я использую вместе с Volt.

1 ответ

Решение

Итак, проблема в том, что ваш код загружается, как только загружается скомпилированный файл.js. Вам нужно запустить код, как только DOM будет готов. Самый простой способ сделать это в вольте - запустить его с помощью метода {action}_ready:

module Main
  class MainController < Volt::ModelController
    def index_ready
      # run view code here
    end
  end
end

Метод index_ready будет вызван после того, как представление индекса будет обработано, и dom будет готов.

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