如何将自定义渲染代码注入Cell?

时间:2014-09-04 13:34:09

标签: ruby ruby-on-rails-4 cells rails-cells

我创建了一个呈现数据表视图的Cell,我想将其重用于其他表视图。对于该数据的每一行,我希望将一些独特的元素与标准列混合在一起。现在,我的Cell show.html.slim的简化部分版本如下:

- users.each do |user|
  tr
    / A column unique to User
    td
      = link_to_if current_user == user, "Groups", user_groups_path(user)
    / Common code that can be shared across other tables
    td user.name

我希望能够从这个级别提取用户特定的代码并从上面注入它。 Cells documentation州:

  

如果有疑问,请将视图的嵌套部分封装到单独的单元格中。您可以在单元格中使用#cell方法来实例化嵌套单元格。

但是,很难简单地实例化一个新的Cell( edit:在表格单元格中):

  1. 我需要知道要创建的单元格。
  2. 我需要能够从父单元格传递信息(在我的示例中为user)。
  3. 我需要能够传递特定于子单元格的信息(在我的示例中为current_user)。
  4. 将此类部分渲染注入Cell的选项有哪些?它们中的任何一种都是首选的解决方案吗?

1 个答案:

答案 0 :(得分:0)

我最后只是在我的单元格上定义了一些接受块

的方法
class DataTableCell < Cell::ViewModel
  def row_prefix(&blk)
    @_row_prefix = blk
  end

  def render_row_prefix(item)
    return unless @_row_prefix
    @_row_prefix.call(item).call
  end
end

每当我想渲染DataTableCell时,我都会提供一个块:

cell = cell(:data_table)
cell.row_prefix do |item|
  cell(:users_row_prefix, user: item, current_user: current_user)
end

在我的手机内,我可以拨打render_row_prefix(row_item)

我没有使用这种解决方案,因为它可能是一种重量级的,但确实有效。