我试图通过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一起使用的另一个库兼容。
答案 0 :(得分:1)
好的,问题是编译后的.js文件加载后你的代码就被加载了。一旦DOM准备就绪,您需要运行代码。在伏特中执行此操作的简单方法是在{action} _ready方法:
上运行它module Main
class MainController < Volt::ModelController
def index_ready
# run view code here
end
end
end
在呈现索引视图并且dom准备就绪后,将调用index_ready方法。