Rails 6: Обновление Html с помощью потока каналов, замена текста новым текстом - PullRequest
0 голосов
/ 05 августа 2020

В моем проекте rails настроен канал, который обрабатывает входящие почтовые запросы и обновляет созданную мной таблицу. У меня есть поле таблицы, в котором я хочу заменить текст и ввести новый текст из почтового запроса. Я получаю все запросы, когда выполняю $ ('#'). Append (), однако, когда я использую $ ('#'). ReplaceWith (), текст обновляется один раз, но не снова. Не является ли replaceWith оптимальным методом?

    // Called when there's incoming data on the websocket for this channel
    received(data) {    

    // will only change text once. example: post1  /*will not change it to later post data */
    $('#my-partial-reference').replaceWith(data.content)

   // will post all updates, but in continuous string ex : post1post2post3post4
   //  $('#my-partial-reference').append(data.content)
  

  }

вот мой _partial. html .erb:

<td id ="my-partial-reference"><%= call.callstatus %></td>

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Итак, у меня это работает, и ответ был немного нестандартным.

Я получил его, введя частичное значение в качестве данных для моего потока данных.

 # first i created a method to accept the partial

 def post_recieved
  ActionCable.server.broadcast "call_channel",
                           content: message_render(params["CallStatus"])  
  end

  #here is a method I made to enter the data to my channel as a partial

  def message_render(message)
    my_model_ref = MyModel.first
    my_model_ref.callstatus = message

    #here i render my partial, but use the data from my temporary model

    render(partial: 'view_sub_folder/my-partial-reference', locals: {call:  my_model_ref })

  end

затем в своем канале я заменяю старый партиал новым

received(data) {
 $('#my-partial-reference').replaceWith(data.content)
  }

Насколько я знаю, это не должно работать. Но моя таблица обновляется в режиме реального времени, не пропуская пост-вызов, кто-нибудь знает, почему это происходит? У меня есть догадки, но я далеко не профессионал в рельсах.

0 голосов
/ 05 августа 2020

.replaceWith() удаляет содержимое из DOM и вставляет новое содержимое за один вызов. Вы заменяете элемент и не сможете выбрать его снова, как показано внутри received(data)

...