1

これは私の以前の質問と似ていることは認めますが、まったく同じではありません。Document.ready?最後に ajax リクエストを使用しているので、opal-jquery をスタックに追加することにし (より簡単な方法を知らない限り)、それによって提供される関数の使用に切り替えました。

私の関数は次のようになります。

def render_component component,mount_point
   React.render React.create_element(component), Element.find[mount_point][0]
end

そして私はそれを次のように呼びます:

Document.ready? do
    render_component LoginForm, '#view_port'
end

問題は、これが機能する前は機能していましたが、現在は機能していないということです。Uncaught NoMethodError: undefined method '[]' for nilエラーが発生しています。機能していたのに、突然これを実行し始めました。

エラーは、何らかの理由 Element.find[mount_point]で返されているためで、理由がnilわかりません。'#view_port'マウントポイントが存在するように、dom がロードされた後に実行する必要があります。ここでわかるように、それは間違いなくdomに存在します:

<body>
  <section id="main">
    <section id="view_port">  
    </section>
  </section>

<div class="hiddendiv common"></div>
</body>

私もそれを包んでみましwindow.addEventListener("load", function () {}たが、効果がありませんでした。

なぜ今それが機能していないのですか?私は何を逃したのですか?

4

1 に答える 1

0

OK、問題は、関数のElement['#view_port']内部が以前に呼び出されていたため、nil が返されたことです。なぜこれができたのかわかりません。うまくいくはずですが、うまくいきませんでした。render_componentDocument.ready?

言及する価値のある別の問題 (わずかに関連) はElement['#view_port'][0]、ネイティブ オブジェクトを取得しようとするとエラーが発生Uncaught TypeError: b.toLowerCase is not a functionするため、Jquery を使用してネイティブ dom 要素を取得できないことですdocument.getElementById('view_port')

于 2015-08-18T10:54:18.577 に答える