1

我正在尝试通过 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 一起使用的另一个库兼容。

4

1 回答 1

1

好的,所以问题是一旦加载编译的 .js 文件,您的代码就会被加载。DOM 准备好后,您需要运行代码。在 volt 中执行此操作的简单方法是在 {action}_ready 方法上运行它:

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

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

于 2015-06-23T03:43:52.817 回答