2014-01-28 4 views
0

Я очень новичок в CoffeScript и хочу изменить код, который я нашел. Сейчас он работает эта функция прав, когда DOM загружен:coffeescript - запустить после загрузки страницы

jQuery -> 
$('#s3-uploader').S3Uploader 

Как я могу переписать его так, что он работает только после загрузки страницы? Мне нужно ждать, чтобы я мог получить правильные переменные экземпляра:

(on page load) -> 
$('#s3-uploader').S3Uploader 
    additional_data: {project_id: @project.id, step_id: @step.id, user_id: current_user.id} 

ответ

-1

Вы ищете $(document).ready() обработчика событий.

$(document).ready() -> 
    $('#s3-uploader').S3Uploader 
+0

Я не думаю, что это правильно ... Мне нужно работать после того, как переменные экземпляра не загружены , поэтому не может быть, когда DOM загружен. Я пробовал $ (window) .load() -> но это тоже не работает. – scientiffic

0
checkVariable = -> 
    if variableLoaded == true 
    # here is your next action 
    else 
    return 

setTimeout 'checkVariable()', 1000 
0

Это довольно старый вопрос, и нет сомнений в том, что нашли решение уже. Но в интересах любого, кто приходит сюда из Google ....

Это также не на 100% ясно из вашего вопроса, но вы, кажется, используете фреймворк, такой как Ruby on Rails.

Если да, то правильным ответом, конечно, является то, что вы не должны обращаться к переменным экземпляра из Coffeescript. Файлы Coffeescript в конвейере активов компилируются во время развертывания и не знают переменных контроллера или экземпляра.

Правильный способ - назначить эти переменные атрибутам данных в DOM, а затем ссылаться на атрибуты данных.

#view.html.erb 
<div id="uploader" data-project_id="<%= @project.id %>" ></div> 

#script.coffee.js 
(on page load) -> 
$('#s3-uploader').S3Uploader 
    additional_data: {project_id: $('#uploader').data('project_id') .... } 
Смежные вопросы