在单页上实现3个列表

时间:2012-07-20 16:27:46

标签: javascript ruby-on-rails

我正在构建一个简单的待办事项应用。我有项目模型,有许多待办事项,文件和讨论。

在项目展示页面上,我有3个列表:Todo列表,文件列表和讨论列表。

我开始使用JS实现这一点。我同时渲染所有列表,顶部有3个按钮,每个按钮切换相应列表的显示/隐藏状态。

我担心加载时间,尤其是文件和讨论列表。文件列表需要加载文件并且加载时间较慢,讨论会很多,因此加载该列表也是耗时的。当所有这些加载时间都被添加时,我担心它会太慢而无法愉快地使用。 (也许是预先优化,但我想要正确学习......)

我只是愚蠢,我应该继续用JS实现这个吗?或者我应该采取不同的方式吗?

如果是这样,怎么样?我应该将每个列表设为单独的页面(项目/待办事项,项目/文件,项目/讨论)吗?我应该继续使用JS并使用分页来加载一定数量的数据,保持加载时间可以忍受吗?

2 个答案:

答案 0 :(得分: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

注意:我没有测试任何这些东西,所以你可能必须使用语法来使它工作:)

答案 1 :(得分:0)

我认为分页不仅有利于加载时间,还有可用性(谁想滚动一个巨大的列表)。

你应该使用ajax(不确定这是不是你的意思),并在页面加载后加载密集的东西,并显示一个漂亮的ajax加载图标。然后,您可以轻松添加链接,以便用户首先请求此数据。

如果您不使用ajax,请务必缓存这些列表。