【问题标题】:Rendering a Rails partial within a single-page app after button-click单击按钮后在单页应用程序中呈现 Rails 部分
【发布时间】:2014-02-19 01:57:14
【问题描述】:

如何在单击按钮后在单页应用程序中呈现 Rails 部分(假设至少有两个控制器在运行)?

无论我阅读了多少材料,我都不清楚:

  • 我需要多少个控制器
  • 我需要多少观看次数
  • 我需要多少操作
  • 我应该将资源分配给哪个操作?

这正是我想要做的:

我希望用户访问我的应用程序的索引页面。在该页面上,他们应该能够单击一个按钮来“获取派对活动结果”。返回给他们的结果应该来自数据库。此按钮单击请求应该是 AJAX。

据我了解,这意味着

  • 我需要两个控制器:1) StaticPagesController 和 2) PartyEventsController。这意味着我应该为派对活动 app/views/layouts/_part_events_results.html.erb 提供部分内容。
  • 我应该有一个 app/views/static_pages/index.html.erb 视图。
  • 这意味着我需要在 assets/javascript 路径之外的某个地方创建一个 js.erb 文件。

目前我有:

app/controllers/static_pages_controller.rb

def index
end

app/controllers/party_events_controller.erb

def food_event
end

app/views/static_pages/index.html.erb

<%= button_to "get events", 'layouts/party_events/', remote: true %>

我设置了“remote: true”,因为这应该表明链接将通过 AJAX 提交。

app/views/static_pages/_party_events.html.erb

  <% food_events.each do |event| %>
    <li><%= event.text %></li>
    <li><%= event.location %></li>
    ---------------------
  <% end %>

其他信息,如果有帮助:

  • Rails 4.0.0
  • 最终会有很多类型的事件,例如“食物”、“音乐”。我需要每个视图的局部视图吗?
  • 对任何设计解决方案开放,只要它是单页应用程序。我知道如何在 PHP/JS 中实现这一点,但我很难理解如何使用 MVC。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    在您的静态页面中,您应该有一个可供 ajax 替换或修改的 DOM 元素。

    在你的 button_to 中,你应该指定你想要点击的控制器和动作

    在您的 party_event_controller#action 中,您可以使用 js 响应并让它呈现一个模板 #action.js.erb,该模板将执行 DOM 操作以替换或更新页面。

    问了类似的问题:Rails - updating div w/ Ajax and :remote => true

    使用无障碍 javascript 展示 ajax crud 的教程:http://stjhimy.com/posts/07-creating-a-100-ajax-crud-using-rails-3-and-unobtrusive-javascript

    【讨论】:

    • 我正在努力解决这个问题。我在哪里粘贴 action.js.erb 文件?动作名称很琐碎吗?我注意到很多人都使用相同的:创建、显示、删除
    • 您可以根据哪个控制器将 action.js.erb 放在视图中。通常,rails 中的动作名称是 CRUD,Create、Show、Delete 是一些 CRUD,它还有 New、Edit、Update、Index。
    • 啊,但是我可以为我的操作命名吗?我想,基本上动作的名称必须反映在相应的视图中。 (您真的只需要 new.html.erb、edit.html.erb、update.html.erb 和 index.html.erb 视图吗?)
    • 大多数时候,CRUD 操作是必要的。额外的控制器动作对于处理其他非粗略动作很有用。在这些额外的操作中,您可以执行重定向或渲染以执行您想要的操作。查看您的应用,您现在很可能只需要 CRUD 页面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 2012-03-22
    • 1970-01-01
    • 2018-02-23
    相关资源
    最近更新 更多