как исправить ошибку «Uncaught TypeError: Невозможно прочитать свойство scrollHeight of undefined» - PullRequest
0 голосов
/ 15 апреля 2020

Большая часть кода для установки ActionCable в моем приложении Rails находится в файле, который загружается только при посещении страницы, названной в честь ресурса. В этом случае scroll_bottom() запускается, когда я нахожусь на сообщениях #index, но выдает ошибку в консоли, когда я где-либо еще.

Могу сказать, что это как-то связано с $(document).on 'turbolinks:load', ->. Как я могу исключить scroll_bottom(), когда меня нет на странице #index?

messages.coffee

App.messages = App.cable.subscriptions.create "MessagesChannel",
 connected: ->
  console.log 'Connected'

 disconnected: ->
  console.log 'Disconnected'

 received: (data) ->
  alert data["mmmm"]

 peak: (message, conversation_id) ->
  @perform 'speak', message: message, conversation_id: conversation_id

$(document).on 'turbolinks:load', ->
 submit_message()
 scroll_bottom()

submit_message = () ->
 $('#response').on 'keydown', (event) ->
  if event.keyCode is 13
   message = event.target.value
   conversation_id = $("#messages").data("conversation-id")
   App.messages.speak(message, conversation_id)
   event.target.value = ""
   event.preventDefault()

scroll_bottom = () ->
 $('#messages').scrollTop($('#messages')[0].scrollHeight)

1 Ответ

1 голос
/ 15 апреля 2020
scroll_bottom = () ->
 $('#messages').scrollTop($('#messages')[0].scrollHeight)

Измените эту функцию на:

scroll_bottom = () => {
 const el = $('#messages').scrollTop($('#messages')[0]
 if (el) {
  return el.scrollHeight;
 }
}

Таким образом, если el не определен, ошибка не будет выдана

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...