将 Ajax 部分视图模板放在 Assets/javascripts 目录而不是视图目录中,Rails
Putting Ajax Partial View Templates in Assets/javascripts Directory Instead of Views Directory, Rails
我正在使用 ajax 请求来呈现局部。它有效,但我使用的设计感觉有些不对劲。
设置:例如,我制作了一个基本的博客应用程序,它只执行每个 restful 操作(索引、显示、编辑、创建、销毁)响应 ajax 个请求。
这是当前的事件流程:
- A link 被点击
remote: true
选项
- 对应控制器的动作响应javascript
- 转到
views/bloggers/correspondingActionName.js.coffee
- 那个views/bloggers目录里面是所有
js.coffee
文件对应于restful 行动。这些 js.coffee
文件中的每一个通常都呈现一个 html.erb
部分。示例:
views/bloggers/edit.js.coffee
$form = $('<%= j render("edit") %>').hide()
$bloggers = $('#listing_bloggers')
$bloggers.after($form)
$form.fadeIn 100
views/bloggers/_edit.html.erb
<div id="edit_blogger">
<h1>Editing blogger</h1>
<%= render 'form' %>
<%= link_to 'Back', bloggers_path, remote: true%>
</div>
所有这一切感觉不对的部分是,感觉好像那些 js.coffee.erb 文件不应位于 views 目录中,而应位于 assets/javascripts 目录中。
我试图将那些 js.coffee.erb 文件放在 assets/javascripts 目录,但它一直抛出关于 j render
方法的错误。
问题:有没有办法让它按照我希望的方式工作?即:将所有 javascript(甚至与 ajax 请求相关的 javascript)保留在 assets/javascripts 目录中?或者,是否有比我上面描述的任何一种方法更传统的策略?或者:为什么我现在做的方式是最好的方式,因为感觉不对。
您现在使用的方式实际上是传统的 Rails 方式。因为文件是 *.erb,代表 "Embedded Ruby",这意味着它们正在 服务器 端呈现(并且必须呈现服务器端)。 assets 目录用于所有 client 端文件。我认为如果你分解正在发生的一切是最有意义的,记住关于 Rails 最重要的理解是默认值:
- 用户点击 link,在 Controller#action 向您的服务器发出 AJAX 请求。
- Controller 执行您在
action
方法中告诉它做的任何事情
- 控制器默认渲染
views/controller/action.js.erb
对应的视图,因为收到的请求是AJAX请求。如果请求是 HTML 请求,则默认视图为 views/controller/action.html.erb
.
- Javascript 由服务器返回,在客户端,在浏览器中执行。
我正在使用 ajax 请求来呈现局部。它有效,但我使用的设计感觉有些不对劲。
设置:例如,我制作了一个基本的博客应用程序,它只执行每个 restful 操作(索引、显示、编辑、创建、销毁)响应 ajax 个请求。
这是当前的事件流程:
- A link 被点击
remote: true
选项 - 对应控制器的动作响应javascript
- 转到
views/bloggers/correspondingActionName.js.coffee
- 那个views/bloggers目录里面是所有
js.coffee
文件对应于restful 行动。这些js.coffee
文件中的每一个通常都呈现一个html.erb
部分。示例:
views/bloggers/edit.js.coffee
$form = $('<%= j render("edit") %>').hide()
$bloggers = $('#listing_bloggers')
$bloggers.after($form)
$form.fadeIn 100
views/bloggers/_edit.html.erb
<div id="edit_blogger">
<h1>Editing blogger</h1>
<%= render 'form' %>
<%= link_to 'Back', bloggers_path, remote: true%>
</div>
所有这一切感觉不对的部分是,感觉好像那些 js.coffee.erb 文件不应位于 views 目录中,而应位于 assets/javascripts 目录中。
我试图将那些 js.coffee.erb 文件放在 assets/javascripts 目录,但它一直抛出关于 j render
方法的错误。
问题:有没有办法让它按照我希望的方式工作?即:将所有 javascript(甚至与 ajax 请求相关的 javascript)保留在 assets/javascripts 目录中?或者,是否有比我上面描述的任何一种方法更传统的策略?或者:为什么我现在做的方式是最好的方式,因为感觉不对。
您现在使用的方式实际上是传统的 Rails 方式。因为文件是 *.erb,代表 "Embedded Ruby",这意味着它们正在 服务器 端呈现(并且必须呈现服务器端)。 assets 目录用于所有 client 端文件。我认为如果你分解正在发生的一切是最有意义的,记住关于 Rails 最重要的理解是默认值:
- 用户点击 link,在 Controller#action 向您的服务器发出 AJAX 请求。
- Controller 执行您在
action
方法中告诉它做的任何事情 - 控制器默认渲染
views/controller/action.js.erb
对应的视图,因为收到的请求是AJAX请求。如果请求是 HTML 请求,则默认视图为views/controller/action.html.erb
. - Javascript 由服务器返回,在客户端,在浏览器中执行。