Я вызываю веб-службу, которая возвращает массив объектов в JSON. Я хочу взять эти объекты и заполнить div HTML. Допустим, каждый объект содержит URL-адрес и имя.
Если бы я хотел создать следующий HTML-код для каждого объекта:
<div><img src="the url" />the name</div>
Есть ли лучший способ для этого? Я вижу несколько способов сделать это:
- Объединить строки
- Создать элементы
- Используйте плагин для шаблонов
- Создайте HTML-код на сервере, а затем обработайте его через JSON.
Ответы:
Варианты №1 и №2 будут вашими самыми непосредственными и простыми вариантами, однако для обоих вариантов вы почувствуете влияние на производительность и обслуживание, создавая строки или создавая объекты DOM.
Шаблоны не так уж и незрелы, и вы видите их всплывающими в большинстве основных фреймворков Javascript.
Вот пример плагина шаблонов JQuery , который сэкономит вам падение производительности и действительно очень прост:
Я говорю, что нужно идти крутым путем (и лучше работать, легче поддерживать) и используйте шаблоны.
источник
Если вам абсолютно необходимо объединить строки вместо обычных:
использовать временный массив:
Использование массивов происходит намного быстрее, особенно в IE. Некоторое время назад я тестировал строки в IE7, Opera и FF. Opera потребовалось всего 0,4 секунды для выполнения теста, но IE7 не завершил работу через 20 МИНУТ !!!! (Нет, я не шучу.) IE с массивом работал очень быстро.
источник
Любой из первых двух вариантов является обычным и приемлемым.
Я приведу примеры каждого из них в Prototype .
Подход №1:
Подход №2:
источник
Возможно, более современный подход - использовать язык шаблонов, такой как Mustache , который реализован на многих языках, включая javascript. Например:
Вы даже получаете дополнительное преимущество - вы можете повторно использовать те же шаблоны в других местах, например, на стороне сервера.
Если вам нужны более сложные шаблоны (операторы if, циклы и т. Д.), Вы можете использовать Handlebars, которые имеют больше функций и совместимы с Mustache.
источник
Вот пример использования моего плагина Simple Templates для jQuery:
источник
Вы можете добавить шаблон HTML на свою страницу в скрытом div, а затем использовать cloneNode и средства запросов вашей любимой библиотеки для его заполнения.
источник
Раскрытие информации: я поддерживаю BOB.
Существует библиотека javascript, которая значительно упрощает этот процесс, называется BOB .
Для вашего конкретного примера:
Это может быть создано с помощью BOB с помощью следующего кода.
Или с более коротким синтаксисом
Эта библиотека достаточно мощная и может использоваться для создания очень сложных структур с вставкой данных (аналогично d3), например:
BOB в настоящее время не поддерживает внедрение данных в DOM. Это в todolist. На данный момент вы можете просто использовать вывод вместе с обычным JS или jQuery и поместить его, где захотите.
Я сделал эту библиотеку, потому что мне не понравились альтернативы вроде jquery и d3. Код очень сложный и трудночитаемый. Работать с БОБом, на мой взгляд, явно предвзято, намного приятнее.
BOB доступен на Bower , поэтому вы можете получить его, запустив
bower install BOB
.источник
1) Это вариант. Создайте html с помощью JavaScript на стороне клиента, а затем вставьте его в DOM в целом.
Обратите внимание, что за этим подходом стоит парадигма: сервер выводит только данные и (в случае взаимодействия) получает данные от клиента asyncronoulsy с запросами AJAX. Код на стороне клиента работает как отдельное веб-приложение на JavaScript.
Веб-приложение может работать, отображать интерфейс, даже если сервер не включен (конечно, оно не будет отображать какие-либо данные или предлагать какое-либо взаимодействие).
В последнее время эта парадигма часто принимается, и на ее основе строятся целые фреймворки (см., Например, backbone.js).
2) По соображениям производительности, когда это возможно, лучше построить html в строке, а затем ввести его целиком на страницу.
3) Это еще один вариант, а также внедрение инфраструктуры веб-приложений. Другие пользователи разместили различные доступные механизмы шаблонов. У меня сложилось впечатление, что у вас есть навыки, чтобы оценить их и решить, идти по этому пути или нет.
4) Другой вариант. Но подавайте его как обычный текст / html; почему JSON? Мне не нравится этот подход, потому что PHP (язык вашего сервера) смешивается с Html. Но я часто принимаю это как разумный компромисс между вариантами 1 и 4 .
Мой ответ: вы уже смотрите в правильном направлении.
Я предлагаю использовать подход от 1 до 4, как и я. В противном случае используйте веб-фреймворк или шаблонизатор.
Просто мое мнение, основанное на моем опыте ...
источник