2012-07-20 54 views
0

我正在構建一個簡單的待辦事項應用程序。我有項目模型,有許多待辦事項,文件和討論。在單個頁面上實現3個列表

在項目展示頁面我有3個列表:待辦事項列表,文件列表和討論列表。

我開始用JS實現這個。我同時渲染所有列表,並在頂部有3個按鈕,每個按鈕都會切換相應列表的顯示/隱藏狀態。

我擔心加載時間,尤其是文件和討論列表。文件列表需要加載文件並且加載時間較慢,討論會很多,因此加載該列表也是耗時的。當所有這些加載時間都添加完畢後,我擔心這樣做太慢而不適合使用。 (也許preoptimisation,但我想學習的權利...)

我只是很愚蠢,我應該繼續與JS執行此?或者我應該以不同的方式做這件事?

如果是這樣,怎麼樣?我應該讓每個列表成爲一個單獨的頁面(項目/待辦事項,項目/文件,項目/干擾)?我應該繼續使用JS並使用分頁來加載一定數量的數據,從而保持加載時間的可承受性?

+1

我的意思是,你真的不需要加載文件列表中的整個文件嗎? ?您只需要元數據即可顯示下載鏈接的內容。這是screenshot_2.jpg,這是project_documentation.docx等。之後,好像你應該把主要項目頁面的總討論範圍縮小到最近的5-10個討論,而不是每個討論。 – DVG 2012-07-20 16:35:27

+0

啊,不知道到底是怎麼回事。好的,我只需要元數據。但問題仍然存在......如何實現這一點?順便說一下,我可以將討論標記爲「已完成」,並且不會再出現在此討論列表中。所以它不會每一次討論,只是積極的討論。 – oFca 2012-07-20 16:38:01

回答

1

我會做這樣的事情。基本上建立您的關聯並將範圍應用到他們以獲取您需要的數據。您可能想要導航到每個嵌套路由以查看整個列表,或者通過rails或JS應用頁面上的分頁。如果你想獲得超級瘋狂,你可以貪婪加載所有這些關聯,但是,每3個協會的條件,我認爲這會得到瘋狂的相當快

模型

class Project < ActiveRecord::Base 
    has_many :files 
    has_many :discussions, :order => 'updated_at DESC' 
    has_many :todos 
end 
class File < ActiveRecord::Base 
    belongs_to :project 
end 
class Discussion < ActiveRecord::Base 
    belongs_to :project 

    #scope for last 5 discussions not marked as finished 
    def self.recent_unfinished 
    where(:finished => false).limit(5) 
    end 
end 
class Todo < ActiveRecord::Base 
    belongs_to :project 

    def self.undone 
    where(:complete => false) 
    end 
end 

控制器

def show 
    @project = Project.find(params[:id]) 
    @files = @project.files.select(:filename, :filesize) #assuming you don't want blob data or whatever 
    @todos = @project.todos.undone 
    @discussions = @project.discussions.unfinished 
end 

注:我沒有測試任何這些東西,所以你可能不得不使用語法來讓它工作:)

+0

感謝您的代碼!將玩弄它並測試它是否好。順便說一句,對於嵌套的路線,你的意思是像項目/文件,項目/待辦事項等,對嗎? – oFca 2012-07-21 11:08:58

0

我想說分頁不僅適合加載時間,而且可用性(誰想滾動一個巨大的列表)。

你應該使用ajax(不知道這是否是你的意思),並加載頁面加載後的密集的東西,並顯示一個不錯的Ajax加載圖標。然後,您可以輕鬆添加鏈接,以便用戶首先請求此數據。

如果你不使用ajax,那麼一定要緩存這些列表。

相關問題