2017-03-04 40 views
0

隨着我目前的項目,我遇到了一種情況,並試圖找出最佳實踐。單個AJAX動作多個視圖導軌最佳實踐

假設有一個儀表板視圖和一個任務視圖。所有任務CRUD操作都可以在任一視圖中完成。

用於顯示錶單的容器和用於列出任務的容器在每個視圖上具有不同的名稱。

我發現3個解決方案,但我不知道這是最好的做法:

  1. 一個視圖不同的途徑:即new_task_dashboard_ iew_path - 不是很寧靜,但new.js和new_dashboard_view.js針對HTML分離操縱

  2. 將一個param [:view]傳遞給AJAX請求,然後在new.js中添加一個if語句以指示要更新哪個容器,即。 (如果params [:view] =='dashboard'種語句)

  3. 只留下new.js - DOM上不存在的容器不會更新 - 只有存在的容器會更新

所有3個工作,但作爲一個新的鐵軌用戶,我試圖找出最合適的方法是什麼。或者也許有一種我不知道的更好的做法?

+0

不知道這應該是「回答」還是隻是評論,因爲它對你的設計方法是主觀的......但是,經驗告訴我(痛苦的是)有單獨的控制器(#1)和然後利用控制器問題/修改您的js/partials /共享視圖以保持乾爽。我發現試圖簡化到不同概念的共享控制器的程度會導致你在添加更多行爲/理解你的代碼時更加痛苦。 – dstull

+0

謝謝,這是有道理的。我大部分時間都在嘗試#2,當我回去改變視圖時,我一直在掙扎。聽起來好像沒有明顯的「Rails方式」,但有些方法可能不那麼痛苦! –

回答

0

只是爲了跟進我以爲我會發布方向我決定去幫助任何其他新的鐵軌用戶。

要跟隨dstull的評論,我發現傳遞一個額外的參數,如視圖最初工作,但後來造成了很大的問題。與其他選項相比,基於額外參數運行大量條件的資源密集型。

在這種情況下,命名空間似乎最適合設計。例如:

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

namespace :task_view do 
    resources :tasks 
end 

然後,我對每個視圖都有單獨的controllers/views/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 
    ... 

儘管回想起來作爲一個新的Rails開發者我有一個很難搞清楚構建的東西明顯。

希望這可以幫助別人!