Добавление элемента на страницу в 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 будет готов.