将元素附加到 VoltRb 中的页面

Appending an element to a page in VoltRb

我正在尝试通过 opal-browser 将一个元素附加到我在 Volt 项目中的一个页面,如下所示:

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 一起使用的另一个库兼容,我有点需要做这个元素附加的事情。

好的,所以问题是您拥有的代码会在编译的 .js 文件加载后立即加载。 DOM 准备就绪后,您需要 运行 代码。在伏特中执行此操作的简单方法是 运行 在 {action}_ready 方法上:

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

index_ready 方法将在索引视图呈现并且 dom 准备就绪后调用。