Подтвердить что ты не робот

Несколько строк таблицы как вид backbone.js?

Итак, у меня есть сетка данных, и каждый элемент в сетке имеет связанную модель и представление. Мне нужно отобразить каждый элемент в виде строк two для достижения нужного пользовательского интерфейса. (Нет, это был не мой дизайн...)

Первая попытка: в режиме просмотра render() просто выполните две строки и добавьте их в this.el. Затем я добавляю каждое представление в таблицу и обнаруживаю, что каждая пара строк была обернута в <div>. Недопустимый HTML и макет - все неправильно.

Хорошо, вторая попытка: снова отобразить две строки в представлении, но вместо добавления всего представления в таблицу я просто добавляю дочерние строки с помощью tableItemView.$("tr"). Ура, это работает! Но держись... события в ряду теперь прекратили стрельбу. Я обнаружил, что это потому, что backbone использует jQuery.delegate, поэтому все события были делегированы исходному el, который больше не является частью таблицы.

Мне нравится чистая архитектура, но изо всех сил пытаюсь найти хорошее решение для этого. Любые идеи?

4b9b3361

Ответ 1

Настройка

tagName: 'tbody' 

должно позволить вам группировать связанные тэг-теги вместе, не нарушая таблицу, и все равно разрешать this.el работать.

Ответ 2

В вашем объекте view, каково ваше свойство tagName, установленное на?

Из документов:

this.el is created from the view tagName, className, and id properties, 
if specified. If not, el is an empty div

Вероятно, вы хотите установить

tagName: 'tr'

И затем в render():

$(this.el).html("<td>content for row one</td>").append("<tr><td>content for row two</td></tr>");

Это может не работать точно, но вы получаете идею.

Ответ 3

Опция состоит в том, чтобы просто создать 2 маленьких представления, каждая из которых ссылается на одну и ту же модель, по одной для каждой строки.

В зависимости от того, насколько интегрированы 2 строки (возможно, они перемещаются/сортируются как единое целое), вы можете иметь представление типа "контроллер", которое создает подзапрос и организует их поведение.