单个AJAX操作多个视图是最佳实践

时间:2017-03-04 05:37:09

标签: ruby-on-rails ajax

在我目前的项目中,我遇到了一种情况,并试图找出最佳实践。

我们说有一个仪表板视图和一个任务视图。所有任务CRUD操作都可以在任一视图中完成。

用于显示表单的容器和用于列出任务的容器在每个视图上具有不同的名称。

我找到了3个解决方案,但不确定哪个是最佳做法:

  1. 一个视图的单独路由:即new_task_dashboard_ iew_path - 不是很安静,但new.js和new_dashboard_view.js是分开进行的HTML操作

  2. 将param [:view]传递给AJAX请求,然后在new.js中添加if语句,以指示要更新的容器即。 (如果参数[:view] =='仪表板'某种陈述)

  3. 只需离开new.js - DOM上不存在的容器不会更新 - 只会更新存在的容器

  4. 所有3个工作,但作为一个新的铁路用户,我试图找出最合适的方法是什么。或者可能有一种我不了解的更好的做法?

1 个答案:

答案 0 :(得分:0)

为了跟进,我想我会发布我决定采用的方向,以帮助其他任何新的铁路用户。

为了跟进dstull的评论,我发现传递一个额外的参数如视图最初工作但后来引起了很大的问题。与其他选项相比,基于额外参数运行大量条件也是资源密集型的。

在这种情况下,命名空间似乎最适合设计。例如:

#config/routes.rb
namespace :dashboard_view do
  resources :tasks
end

namespace :task_view do 
  resources :tasks
end

然后我为每个视图分别设置了控制器/视图/ javascript。例如:

#views/dashboard_view/tasks/new.js
$('#dashboard-task-form-container).html('<%= j render "form" %>');

#views/task_view/tasks/new.js
$('#task-form-container).html('<%= j render "form" %>');

#controllers/dashboard_view/tasks_controller.rb
class DashboardView::TasksController < ApplicationController
  ...

#controllers/task_view/tasks_controller.rb
class TaskView::TasksController < ApplicationController
  ...

虽然回想起来作为一名新的铁轨开发人员似乎很明显,但我很难搞清楚结构。

希望这有助于其他人!