2016-03-18 1 views
1

В моем просмотре файлов/сообщениях/new.html.erb, у меня есть сценарий на дне:Эрба в Javascript приводит к ошибке при загрузке страницы

$('div #mainPhotoDropzone').dropzone({ 
     url: "/photos?post_id=" + $("#post_form").data('post-id'), 
     complete: function(file){ 
      var url = "<%= @post.photos.first.file.path %>"; 
      $.get(url, function(data){ 
      $('#mainPhotoDropzone').attr('style', "background-image: url('" + data.main_photo + "')"); 
      }) 
     } 

я получаю сообщение об ошибке при загрузке страницы, так как @post.photos.first Безразлично» еще нет. Это должно быть вызвано, когда загрузка завершена, поэтому, когда файл существует.

Как я могу избежать этой ошибки? Я не понимаю, почему это выполняется при загрузке страницы, когда я определил его на «завершенном» событии, и я не вижу альтернативы.

+0

Ваша разметка отображается до запуска любого из JS. – elclanrs

+0

@elclanrs, но это не часть фактической разметки, это сценарий внизу ... Как я мог избежать этой ошибки и все еще использовать эту функцию? –

ответ

2

Код внутри <% ... %> выполнен до отправки javascript клиенту. Создается javascript, теги <%= %> заменяются результатом запуска кода внутри них. Так что если у вас есть, например:

I am <%= "super "*5 %>awesome. 

Что браузер видит:

I am super super super super super awesome 

Поскольку код "super "*5 был уже был запущен.

+0

благодарит за вашу помощь! Как я могу избежать этой ошибки, но сохранить аналогичную функцию? –

+0

Ответ сложный, вы, вероятно, захотите задать отдельный вопрос. – Shelvacu