2014-09-04 1 views
0

Я создал ячейку, которая отображает табличный вид данных, и я хотел бы использовать ее для других табличных представлений. Для каждой строки этих данных я хотел бы иметь некоторые уникальные элементы, смешанные со стандартными столбцами. Сейчас, упрощенная версия части 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 (редактирования: в ячейке таблицы):

  1. Мне нужно знать, что ячейка для создания.
  2. Мне нужно иметь возможность передавать информацию из родительской ячейки (user в моем примере).
  3. Мне нужно уметь передавать информацию, относящуюся к дочерней ячейке (current_user в моем примере).

Какие существуют варианты для инъекции этого частичного рендеринга в ячейку? Кто-нибудь из них обычно предпочитает решения?

+0

Вы хотите сделать частичным? Я не совсем понимаю общий вопрос, особенно когда он относится к таблице. – engineersmnky

+0

Мое использование таблицы - это просто конкретный пример. Я был бы рад сделать частичным, пока я могу сообщить Cell, что частичное для рендеринга (разные контексты будут иметь разные частичные), и я могу предоставить частичную информацию без необходимости редактировать мой общий код Cell. – Shepmaster

+0

Частично принимаем местные жители, которые будут характерны для частичного. условная логика может управляться в текущем виде или в частичном, который отображает частичные. – engineersmnky

ответ

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).

Я не живу с этими решениями, так как это может быть тяжелый вес, но он действительно работает.

Смежные вопросы