将元素附加到 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 准备就绪后调用。
我正在尝试通过 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 准备就绪后调用。