Пример коллекции backbone.js с использованием шаблона марионеток

Не могли бы вы предложить мне пример для просмотра списка через систему шаблонов марионеток. В принципе, у меня есть шаблон марионетки и на основе шаблона я создаю список таблиц.

Ответы

Ответ 1

Чтобы создать список строк таблицы с Магической сетью Магистраль, вам нужно определить пять вещей:

  • Модель для каждой строки
  • Коллекция для хранения всех моделей строк
  • A CollectionView для итерации по коллекции
  • ItemView, чтобы обеспечить функциональность, специфичную для строки
  • Шаблон для ItemView, который обеспечивает разметку для каждой строки

Пример использования примера

Скажите, что у вас есть следующие данные:

var stooges = [{ name: 'moe', age: 44, userid: 1}, 
               { name: 'larry', age: 44, userid: 2}, 
               { name: 'curly', age: 44, userid: 3}];

Определить модель и коллекцию

Для следующих данных вы хотите иметь модель:

var StoogeModel = Backbone.Model.extend({});

где вы можете настроить некоторые разумные значения по умолчанию для ваших данных и других свойств, например idAttribute. Существует множество ссылок на то, как настроить вашу модель. Ваша коллекция должна, как минимум, взять stoogeModel.

var StoogeCollection = Backbone.Collection.extend({
  model: StoogeModel
});

Настройте свои представления

Чтобы выполнить итерацию вашей коллекции в таблицу, вам понадобится CollectionView и ItemView.

var StoogesCollectionView = Backbone.Marionette.CollectionView.extend({
  tagName: "table",
  childView: StoogeItemView
});

Для всех CollectionViews требуется минимум a childView, который является ItemView (который мы определяем ниже), который они будут использовать для получения функциональных возможностей для создания html для каждой строки, а collection, который является коллекции, содержащие модели, которые заполняют каждую строку. Мы передадим эту коллекцию, когда мы установим stoogesCollectionView. Свойство tagName указывает Backbone для инкапсуляции дочерних элементов в тег table.

var StoogeItemView = Backbone.Marionette.ItemView.extend({
  tagName: "tr",
  template: '#stooge-template'
});

<script type="text/template" id="stooge-template">
  <td id="name"><%= name %></td>
  <td id="age"><%= age%></td>
  <td id="userid"><%= userid%></td>
</script>

Все ItemViews требуют шаблона, который мы определяем в нашем HTML-документе, здесь #stooge-template. Если ItemView является дочерним элементом коллекции, вам не нужно определять его модель, она будет предоставлена ​​родительским CollectionView. HTML, отображаемый каждым дочерним элементом StoogeItemView, будет инкапсулирован тегами tr, потому что мы хотим, чтобы это была строка для каждого дочернего элемента коллекции.

Из ItemView вы можете обрабатывать события на уровне "строка", например click или focus в столбце строки. Вы также можете обрабатывать изменения в переданной модели. Кроме того, из ItemView вы можете решить передать в помощники, которые могут манипулировать способом отображения данных в своем шаблоне.

Объединяя все вместе

Теперь мы определили нашу модель, коллекцию, представление коллекции, представление дочерних элементов и шаблон представления элемента. Затем мы соединим все эти части.

Заполните свою коллекцию

Вы передаете массив марионеток в конструктор вашей коллекции.

var myStooges = new StoogeCollection(stooges);

Они формируются в модели, и они загружают вашу коллекцию.

Отрежьте свой CollectionView

Вы передаете свою загруженную коллекцию в свой коллекционный вид.

var myStoogesView = new StoogesCollectionView({ collection: myStooges  });

Измените свой вид

Все виды марионеток поставляются в комплекте с помощью метода render. В нашем случае вызов

myStoogesView.render();

создаст <table> с тремя элементами <tr>, каждый из которых содержит столбец для полей name, age и userid в нашем наборе данных. Чтобы вставить полученный HTML в DOM, мы просто используем свойство view el. Для упрощения мы можем ввести вид прямо в тело

document.body.appendChild(myStoogesView.el);

или с помощью jQuery:

$(document.body).append(myStoogesView.el);

Помимо этого примера

Существует много функциональных возможностей, о которых мы даже не начали обсуждать. Прочтите docs! И проверьте много много учебников. Надеюсь, что это краткое введение поможет!