为了账号安全,请及时绑定邮箱和手机立即绑定

尝试呈现 js.erb 部分模板时出现问题

尝试呈现 js.erb 部分模板时出现问题

qq_花开花谢_0 2022-05-26 16:39:51
Rails 版本 6.0.2.1 Ruby 版本 2.6.5我正在尝试使用 jquery 在我的应用程序的显示视图中呈现部分内容。这是我的 javascript 文件:import $ from "jquery";$(() =>  $("a#test-button").on("click", ev => {    ev.preventDefault;    $("div#teacher-form").html("<%= j render(partial: 'teacher_form') %>");  }));然后我在视图模板中引用了 javascript,如下所示:<%= javascript_pack_tag 'test_button' %>  <%= link_to 'Test',  stakeholder_student_school_year_path, data: { type: :html }, remote: true,  id: 'test-button', class: 'btn btn-info' %><div id="teacher-form"></div>在我的控制器中也是如此:def show    @teachers = @year.teachers     respond_to do |format|      format.html       format.js {         render 'student_school_years/_teacher_form',         layout: false       }    end   end当我单击测试按钮添加部分时,它会在视图中呈现以下代码片段 <%= j render(partial: 'teacher_form') %> 而不是实际的部分模板。无法弄清楚发生了什么。
查看完整描述

1 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

您似乎完全误解了 JS.erb 模板的工作原理。


您不.js.erb使用javascript_pack_tag. 那是在资产管道中引用资产。而且您不能在资产管道中渲染部分,因为它们是在部署时编译的。


你只是得到一个文字字符串的原因"<%= j render(partial: 'teacher_form') %>"是资产不是通过 webpack 中的 ERB 发送的。Sprockets 会做到这一点并引发错误。


相反,您将编写js.erb模板以更改页面:


def show

    @teachers = @year.teachers 

    respond_to do |format|

      format.html 

      format.js # renders show.js.erb

    end 

  end

// You can't use imports since this is not run in the assets pipeline

// you have to make jQuery a global

$("#teacher-form").html("<%= j render(partial: 'teacher_form' %>");

当您单击链接时,Rails ujs 驱动程序实际上只是加载该脚本并在页面上对其进行评估。前提是这可以让您在没有 SPA 框架或实际编写请求处理程序的情况下执行 ajax 请求和 SPA 之类的东西。它是否是一个好主意是值得商榷的。


我不明白的是,为什么您不首先将表单放在视图中,而只是切换其可见性,而不是让服务器将其同化,这只是客户端转换。


查看完整回答
反对 回复 2022-05-26
  • 1 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号