Магистраль: привязка модели к шаблону и привязка шаблона к модели
Я занимаюсь интеграцией Backbone и Backbone.Marionette в существующий проект веб-приложений. В настоящее время мы планируем оставить все существующие функциональные возможности в проекте, но с любой новой функциональностью мы воспользуемся структурированием Backbone и принципами Marionette. Одним из первых заказов является решение о библиотеке визуализации HTML-шаблона, а также решение для привязки данных для этих шаблонов. Раньше мы использовали JsRender и JsViews для всех наших потребностей в шаблонах и привязки данных, но мы готовы исследовать новые возможности для нашей новой функциональности. Поэтому я в основном изучал различные решения и теперь нуждаюсь в советах или мыслях о том, что выбрать. Вот что я до сих пор смотрел:
Backbone.StickIt:
Плюсы: Кажется, следует придерживаться базовой концепции разделения на проблемы, которые помогают сохранить ваши шаблоны очень "чистыми".
Минусы: Похоже, вам нужно написать немного больше кода в своих представлениях, чтобы определить привязки. Кроме того, кажется, что у вас нет возможности выполнять условный рендеринг, поэтому вы всегда должны отображать полный шаблон и просто переключаться на отображение определенных элементов.
Rivets.js:
Плюсы: обрабатывает немного больше параметров привязки данных в шаблоне, не делая его слишком грязным.
Минусы: Также, кажется, не хватает условного рендеринга.
Knockback/Knockout:
Плюсы: обрабатывает все виды привязки данных через атрибуты.
Минусы: легко начать "загрязнение" шаблона конверторами. Необходимо добавить еще один шаг, чтобы создать модели представления Knockout из моделей Backbone.
JsViews:
Плюсы: похоже на способности нокаута, но с различным синтаксисом. Обработка условного рендеринга.
Минусы: в прошлом мы загрязняли наши шаблоны, добавляя слишком много бизнес-логики в шаблон, но это может быть проблемой нашего развития, которую мы можем исправить. Необходимо создать функциональные возможности для привязки функциональности наблюдаемости JsViews к событиям модели Backbone. Другие библиотеки, такие как StickIt и Knockback, автоматически обрабатывают это.
Мы также рассмотрели Backbone.ModelBinder, который находится где-то между StickIt и Rivets.
Может ли кто-нибудь поделиться любыми решениями, которые они сделали, и почему они выбрали один плагин/библиотеку над другим? Я также открыт для других предложений. Спасибо.
Ответы
Ответ 1
Я использовал эти
Mustache.js
Pro: не только усы поддерживают привязку переменной, но также могут обрабатывать привязку функций. Например, вы можете иметь
<a href="{{test}}" >click me </a>
И тогда у вас есть метод, называемый test. Это экономит много избыточного назначения класса /id для связи и привязывает событие в классе View.
Con: Мне не нравится его синтаксис.
Далее я использую coffeescript в Ruby on Rails, который имеет встроенную систему jost eco templating. pro, у вас есть шаблоны в отдельных файлах. В pageload они получают привязку к глобальной переменной в dom. Они минимизированы и лучше, чем некоторые теги шаблона script. Другой профессионал, вы пишете, если еще и для циклов, как вы делаете в рубине. Недостатком является то, что они используют метки бритвы и не позволяют легко смешивать с кодом сервера (например, перевод).
Другая библиотека - это символ подчеркивания шаблонов. Очень простой, но довольно мощный. Proside, у вас уже есть это (подчеркивание необходимо для магистрали). Недостатком является то, что вы не можете (по умолчанию) загрузить шаблон из внешнего файла. Я решил это, используя код serveride (require_once, render partial). Однако если вы используете require.js вместе с текстовым плагином (http://requirejs.org/docs/download.html#text), вы можете загрузить шаблоны в качестве зависимости.