我正在使用ajax请求来渲染部分内容。它有效,但对我正在使用的设计感觉不对。
设置:作为一个例子,我创建了一个基本的博客应用程序,它只是让每个休息操作(索引,显示,编辑,创建,销毁)都响应ajax请求。
以下是当前的事件流程:
remote: true
选项views/bloggers/correspondingActionName.js.coffee
js.coffee
个文件。这些js.coffee
文件中的每一个通常都会呈现html.erb
部分。示例:视图/博客/ edit.js.coffee
$form = $('<%= j render("edit") %>').hide()
$bloggers = $('#listing_bloggers')
$bloggers.after($form)
$form.fadeIn 100
视图/博客/ _edit.html.erb
<div id="edit_blogger">
<h1>Editing blogger</h1>
<%= render 'form' %>
<%= link_to 'Back', bloggers_path, remote: true%>
</div>
对所有这一切感觉不对的部分是,感觉好像那些 js.coffee.erb 文件不应该在视图中目录,而是位于 assets / javascripts 目录中。
我尝试将 js.coffee.erb 文件放在 assets / javascripts 目录中,但它不断引发关于j render
方法的错误。
问题:有没有办法让它以我希望的方式运作?那就是:在assets / javascripts目录中保留所有javascript(甚至是与ajax请求相关的javascript)?或者,是否存在比我上述任何一种方式更常规的策略?或者:为什么我现在这样做是最好的方式,因为它感觉不对。
答案 0 :(得分:1)
你现在正在做的事情实际上是传统的Rails方式。因为文件是* .erb,它代表“嵌入式Ruby”,这意味着它们被呈现为服务器端(并且必须呈现为服务器端)。资产目录适用于所有客户端端文件。我认为如果你打破正在发生的一切,最有意义的是,记住关于Rails的最重要的事情是默认值:
action
方法views/controller/action.js.erb
中呈现相应的视图,因为收到的请求是一个AJAX请求。如果请求是HTML请求,则默认视图为views/controller/action.html.erb
。