1

次のように、opal-browser を介して、Volt プロジェクトのページの 1 つに要素を追加しようとしています。

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 の準備ができたら、コードを実行する必要があります。ボルトでこれを行う簡単な方法は、 {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 に答える