【问题标题】:Putting Ajax Partial View Templates in Assets/javascripts Directory Instead of Views Directory, Rails将 Ajax 部分视图模板放入 Assets/javascripts 目录而不是 Views 目录,Rails
【发布时间】:2015-02-11 04:19:20
【问题描述】:

我正在使用 ajax 请求来呈现部分。它有效,但我使用的设计感觉有些不对劲。

设置:举个例子,我制作了一个基本的博客应用程序,它只是让每个 RESTful 操作(索引、显示、编辑、创建、销毁)响应 ajax 请求。

这是当前的事件流程:

  1. 使用remote: true 选项单击链接
  2. 对应控制器的动作响应javascript
  3. 转到 views/bloggers/correspondingActionName.js.coffee
  4. 在那个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 文件不应该在视图目录中,而是而是位于 assets/javascripts 目录中。

我试图将那些 js.coffee.erb 文件放在 assets/javascripts 目录中,但它一直抛出关于 j render 方法的错误。

问题:有没有办法让它按照我想要的方式工作?也就是说:将所有 javascript(甚至与 ajax 请求相关的 javascript)保留在 assets/javascripts 目录中?或者,有没有比我上面描述的任何一种方式更传统的策略?或者:为什么我现在做的方式是最好的方式,因为感觉不对。

【问题讨论】:

    标签: javascript ruby-on-rails ajax coffeescript


    【解决方案1】:

    实际上,您现在使用的方式是传统的 Rails 方式。因为文件是 *.erb,代表“Embedded Ruby”,这意味着它们被呈现在 服务器 端(并且必须呈现在服务器端)。 assets 目录用于所有 client 端文件。我认为如果你分解所有正在发生的事情是最有意义的,记住最重要的是要了解 Rails 是默认值:

    1. 用户在 Controller#action 上单击链接,该链接向您的服务器发出 AJAX 请求。
    2. 控制器执行您在action 方法中告诉它执行的任何操作
    3. 控制器默认渲染views/controller/action.js.erb中的相应视图,因为收到的请求是AJAX请求。如果请求是 HTML 请求,则默认视图为 views/controller/action.html.erb
    4. 服务器返回的 Javascript 在客户端,在浏览器中执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多