2015-08-18 2 views
1

Я признаю, что это похоже на предыдущий мой вопрос, но это не совсем то же самое. Поскольку я использую запросы ajax, в конце концов я решил добавить opal-jquery в свой стек (если вы не знаете более простой способ) и переключился на использование функции Document.ready?, предоставленной им.Попытка получить шаблон response.rb для рендеринга в opal с использованием 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, и я не знаю почему. Он должен работать после того, как dom загружен, так что точка монтирования '#view_port' должна существовать; это, безусловно, существует в йот, как вы можете увидеть здесь:

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

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

Я даже пытался окружив его window.addEventListener("load", function() {}, но никакого эффекта.

Почему это сейчас не работает? что я пропустил?

ответ

0

OK, проблема в том, что Element['#view_port'] внутри функции render_component вызывался до Document.ready? и поэтому возвращался на ноль. Почему это я не знаю, это должно сработать, но это не так, так что идите.

Другая проблема, которая стоит отметить (немного связанные) в том, что пытается Element['#view_port'][0] получить собственные результаты объекта в ошибке Uncaught TypeError: b.toLowerCase is not a function так что вы не можете использовать Jquery, чтобы получить собственные элементы DOM, а это значит, застрял с document.getElementById('view_port').

Смежные вопросы