我正在将一个应用程序从rails 6升级到7,并用TurboStreams替换UJS.

目前的UJS

$('#sightings_by_type').html("<%= escape_javascript (render partial: '/member/spotting_sessions/sightings_by_stock_type', locals: { editable: true }) %>")
$('#sighting_added_confirmation').css('display', 'block')
$('#sighting_added_confirmation').fadeOut(2000)

我想用我已有的一个css类来替换淡出调用和更改显示. 但是,我不知道应该如何使用turbo_Stream.haml文件添加类. 似乎turbo_stream可以作用于元素的全部内容(替换div等),但不能深入到更改元素属性的低级别.

Turbo_Streams是不是解决这个问题的错误方式?

我可以把逻辑放入刺激控制器中,但感觉不适合这样做.

这是目前为止的添加_sighting.turbo_Stream.haml文件:

= turbo_stream.update "sighting_details", partial: "/member/spotting_sessions/sightings_by_stock_type", locals: { editable: true }

推荐答案

您可以在您的turbo流中使用Java脚本:

<%= turbo_stream.update "sighting_details", partial: "/member/spotting_sessions/sightings_by_stock_type", locals: { editable: true } %>
<%= turbo_stream.after "sighting_details" do %>
  <script charset="utf-8">
    $('#sighting_added_confirmation').css('display', 'block')
    $('#sighting_added_confirmation').fadeOut(2000)
  </script>
<% end %>

您可以自定义turbo流操作:

// app/javascript/application.js

Turbo.StreamActions.style = function () {
  this.targetElements.forEach((target) => {
    target.style = this.templateContent.textContent
  });
};
<%= turbo_stream.action :style, :sighting_details, "display: block;" %>

或者,您可以将其设置为方法:

# config/initializers/turbo_stream_actions.rb

module TurboStreamActions
  def style(...)
    action(:style, ...)
  end

  Turbo::Streams::TagBuilder.include(self)
end
<%= turbo_stream.style :sighting_details, "display: block;" %>

Ruby-on-rails相关问答推荐

在has_many关系中由两个条件 Select

使用turbo流的部分渲染在rails 7中不起作用.

Ruby on Rails - 外键不匹配

我可以向 erb 变量插值添加一个类吗?

Time.zone.now.to_date 是否等同于 Date.today?

带有 Cucumber 和 rspec 的 BDD - 这什么时候是多余的?

回形针图片网址

添加自定义字段/列以使用 Rails 4 进行设计

bundle和gem安装的区别?

如何在 rspec 测试中输出变量?

批量查找 mongoDB 记录(使用 mongoid ruby​​ 适配器)

link_to 将参数与 url 一起发送并在目标页面上抓取它们

如何在 Ruby on Rails 的内存缓存存储中列出键?

Rails:带参数的 URL/路径

在rails国际化yml文件中传递变量

Test::Unit Rails - 如何断言一个数字大于另一个?

如何从 rails 控制器操作发出 404 响应?

从模型中获取验证

没有UTC的Rails 3默认日期时间格式

Rails:您已经激活了 rake 10.3.1,但您的 Gemfile 需要 rake 10.2.2 (Gem::LoadError)