Respond_to js returns html 页面的一部分以及 JavaScript 而不是 js.erb 文件
Respond_to js returns a part of the html page along with the JavaScript instead of js.erb file
我正在尝试重写一个表单以显示为模态表单。为此,我使用 popper 和 bootstrap lib,它们都包含在项目中并且可以工作。但是我没有成功,总是出现同样的错误:
VM44399:1 Uncaught SyntaxError: Unexpected token '<'
at DOMEval (jquery3.self-74ad.js?body=1:112)
at Function.globalEval (jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:346)
at text script (jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:9641)
at ajaxConvert (jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:8788)
at done (jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:9256)
at XMLHttpRequest.<anonymous> (jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:9549)
我的 js 库:
// app/assets/javascripts/application.js
/* External libraries */
//= require jquery3
//= require jquery_ujs
//= require popper
//= require bootstrap
在控制器中,我将 respond_to 用于 return 我的 js 文件:
def new
respond_to do |f|
f.js
end
end
添加到 index.slim 模式 类 并将 link 更改为 remote=true:
= link_to new_article_path, { remote: true,
'data-toggle' => "modal",
'data-target' => '#modal-window',
class: 'btn btn-outline-success' }
#modal-window.modal.fade[role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"]
.modal-dialog.text-left[role="document"]
.modal-content
已将 new.slim 重命名为 _new.slim 并向它们添加模态 类:
# ArticlesController
.card.modal-header
.card-body.w-100
h5.card-header New Article
= render 'form'
使用 js 创建 new.js.erb,它添加并调用模态 window:
$("#modal-window").find(".modal-content").html("<%= j (render 'new') %>");
$("#modal-window").modal();
结果,我还是得到了一些看不懂的html的一部分,有一堆我理解的<script src="/assets/jquery-ui/
之类的脚本标签,这只是整个申请页面的一部分,其中有代码new.js.erb只是代码的形式。
这可能是什么问题?
感谢解答!
可能在控制器中遵循更多 rails 约定:
def new
@article = Article.new
end
def create
@article = Article.create!(article_params)
respond_to do |format|
format.js
end
end
问题通过在format.js内或respond_to方法前添加render layout: false
解决:
def new
respond_to do |format|
format.js { render layout: false }
end
end
我正在尝试重写一个表单以显示为模态表单。为此,我使用 popper 和 bootstrap lib,它们都包含在项目中并且可以工作。但是我没有成功,总是出现同样的错误:
VM44399:1 Uncaught SyntaxError: Unexpected token '<'
at DOMEval (jquery3.self-74ad.js?body=1:112)
at Function.globalEval (jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:346)
at text script (jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:9641)
at ajaxConvert (jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:8788)
at done (jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:9256)
at XMLHttpRequest.<anonymous> (jquery3.self-5af507e253c37e9c9dcf65064fc3f93795e6e28012780579975a4d709f4074ad.js?body=1:9549)
我的 js 库:
// app/assets/javascripts/application.js
/* External libraries */
//= require jquery3
//= require jquery_ujs
//= require popper
//= require bootstrap
在控制器中,我将 respond_to 用于 return 我的 js 文件:
def new
respond_to do |f|
f.js
end
end
添加到 index.slim 模式 类 并将 link 更改为 remote=true:
= link_to new_article_path, { remote: true,
'data-toggle' => "modal",
'data-target' => '#modal-window',
class: 'btn btn-outline-success' }
#modal-window.modal.fade[role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"]
.modal-dialog.text-left[role="document"]
.modal-content
已将 new.slim 重命名为 _new.slim 并向它们添加模态 类:
# ArticlesController
.card.modal-header
.card-body.w-100
h5.card-header New Article
= render 'form'
使用 js 创建 new.js.erb,它添加并调用模态 window:
$("#modal-window").find(".modal-content").html("<%= j (render 'new') %>");
$("#modal-window").modal();
结果,我还是得到了一些看不懂的html的一部分,有一堆我理解的<script src="/assets/jquery-ui/
之类的脚本标签,这只是整个申请页面的一部分,其中有代码new.js.erb只是代码的形式。
这可能是什么问题?
感谢解答!
可能在控制器中遵循更多 rails 约定:
def new
@article = Article.new
end
def create
@article = Article.create!(article_params)
respond_to do |format|
format.js
end
end
问题通过在format.js内或respond_to方法前添加render layout: false
解决:
def new
respond_to do |format|
format.js { render layout: false }
end
end