Rails 6:使用 Channel Stream 更新 Html,用新文本替换文本

Posted

技术标签:

【中文标题】Rails 6:使用 Channel Stream 更新 Html,用新文本替换文本【英文标题】:Rails 6: Updating Html With Channel Stream, Replacing Text With New Text 【发布时间】:2020-11-25 07:15:16 【问题描述】:

我在我的 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>

【问题讨论】:

【参考方案1】:

所以我得到了这个工作,答案有点开箱即用。

我通过输入一个部分作为我的数据流的数据来让它工作。

 # 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)
  

据我所知,这应该行不通。但是我的表格是实时更新的,不会错过任何一个电话,有人知道为什么会这样吗?我有一些猜测,但我远非 Rails 专业人士。

【讨论】:

以上是关于Rails 6:使用 Channel Stream 更新 Html,用新文本替换文本的主要内容,如果未能解决你的问题,请参考以下文章

Channel-Stream与编解码器

Channel-Stream与编解码器

Redis发布订阅和Stream

使用 HAML 的 Rails HTTP 流式传输

具有多个路由键的Spring引导流绑定队列

ActionCable 频道在 Rails 插件之外无法访问