Backbone.js: Как определить модель родительского представления для события? - PullRequest
1 голос
/ 01 декабря 2010

У меня есть две коллекции экземпляров: элементы и разделы.

Каждый раздел может иметь несколько элементов, и каждый элемент может находиться в нескольких разделах.

Когда я добавляю элемент в раздел, я хочу получить хеш этого элемента и сохранить его в атрибуте массива раздела. Этот атрибут массива используется для определения того, какие элементы отображаются в каждом разделе.

Итак, допустим, что у меня есть ItemListModel со 100 элементами и у меня есть раздел с атрибутом 'items' с массивом [item3_id_hash, item27_id_hash, item59_id_hash]. Когда я отображаю SectionView, я сначала сопоставляю эти хэш-идентификаторы с коллекцией Items, чтобы получить эти объекты, а затем создаю ItemView, который отображает только эти объекты.

Проблема, с которой я столкнулся, заключается в идентификации этих элементов при создании и удалении, чтобы я мог получить их идентификаторы и добавить / удалить их из массива атрибутов section.item.

Я могу придумать хакерское решение для идентификации элемента после добавления, установив глобальную переменную по имени parent. Однако я хочу избежать использования глобалов.

Удаление - это совсем другое дело. Когда пользователь нажимает X, чтобы удалить элемент в представлении, я не могу понять, как я могу идентифицировать модель родительского раздела или, по крайней мере, идентифицировать его идентификатор.

Пример просмотра:

  • Section_1
    • Item_1
    • Item_2
    • Item_3
  • section_2
    • Item_4
    • Item_5
    • Item_6

Если пользователь удаляет Item_2 из представления, как я могу получить Section_1.model.get ('id'), чтобы я мог получить объект section_1, а затем удалить 'id' для Item_2 из атрибута массива 'items' в Section_1

Единственное решение, которое я могу придумать, это передать id для Section_1 в представление HTML, когда я рисую ItemsView для Section_1. Это хакерский и хрупкий, поэтому я пытался избежать этого.

FYI: SectionListView создает один или несколько SectionsView, каждый из которых создает один ItemListView, который создает один или несколько ItemView

1 Ответ

1 голос
/ 01 декабря 2010

Вы всегда должны вернуться к модели.Если вы хотите удалить элемент, то удалите его из списка моделей и по-другому прислушайтесь к событиям удаления.

Таким образом, ваш раздел наблюдает событие удаления списка и действует соответственно (либо удалите элемент настраницы или перерисовать его самостоятельно).

Модели и события (альтернативно, маршруты) предпочтительнее, чем склеивать код в большинстве ситуаций.

Надеюсь, я понял ваш вопрос.

...