Разделение кода в приложениях AJAX

Каковы некоторые стратегии достижения разделения кода в приложениях AJAX?

Я создаю приложение PHP, для которого я хотел бы иметь хороший интерфейс AJAX. Я давно научился использовать какие-то шаблоны в моем PHP-коде, чтобы обеспечить хорошее разделение между моей логикой и отображаемым кодом, но у меня возникают проблемы с поиском хороших способов сделать это с помощью кода JavaScript во внешнем интерфейсе. Я использую jQuery, чтобы упростить получение данных XML и манипулирование DOM, но я обнаружил, что код логики и макета начинает смешиваться.

Настоящая проблема заключается в том, что я получаю XML-данные из серверной части, которые затем нужно переформатировать, и вокруг них должен быть обернут полезный текст (указания и т.п.). Я думал об отправке уже отформатированного HTML, но это потребовало бы обширной переработки бэкэнда, и должен быть способ лучше, чем то, что я придумал сам.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
5
0
789
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Я не на 100% уверен, что понимаю, в чем ваша проблема, но что вы можете сделать, особенно если мы говорим о приложении AJAX с одностраничным стилем, это использование классов Singletons, ориентированных на конкретные задачи.

var XMLFormatter = function(){
    /* PRIVATE AREA */

    /* PUBLIC API */
    return {
        formatXML : function(xml){
            /* DO SOMETHING RETURN SOMETHING */
        }
    }
}();

У вас остался статический класс XMLFormatter, который можно вызывать в любом месте страницы вот так ...

function useClass(){
    $('#test').update(XMLFormatter.formatXML(someXML))
}

Эта функция может использоваться как обратный вызов для запросов AJAX. Я использую этот метод для логики страницы, создавая класс Page, который возвращает объект с методом инициализации, который вызывается при загрузке страницы. Затем метод init прикрепляет различные события и прочее к моей странице и ее элементам. Об этом подходе говорится в Шаблоны проектирования Pro JavaScript, и его стоит прочитать, если у вас есть время и деньги.

Также стоит иметь в виду, что Javascript сильно отличается от других языков, и обычно лучшие практические подходы людей обычно просто адаптированы из Java. Хотя это нормально, он не использует Javascript в полной мере. Помните, что Javascript в значительной степени управляется событиями из-за его близости к взаимодействию с пользовательским интерфейсом, и вы обнаружите, что некоторый код события смешивается с другим кодом. На веб-сайте Crockfords (http://javascript.crockford.com/) есть несколько статей о передовой практике, а также ряд других полезных советов.

Ответ принят как подходящий
  • напишите свои шаблоны на HTML-странице, возможно, в скрытом элементе.
  • получать данные с помощью вызовов AJAX, мне проще использовать JSON, поэтому вам не нужно «переформатировать» XML, это только данные.
  • применить шаблон к данным, чтобы сгенерировать HTML и вставить на отображаемую страницу.

проверьте некоторые плагины шаблонов jQuery: jsRepeater, jTemplates, noTemplate, Шаблон

Я использовал jTemplates в своем последнем проекте для форматирования JSON, это определенно самое элегантное решение, которое я когда-либо видел.

tags2k 06.11.2008 18:53

В последнее время я задавал похожие вопросы (здесь и здесь) и нашел пару вещей, которые могут помочь. Я понимаю те же проблемы, которые вы обнаруживаете при принудительном включении пользовательского интерфейса в код.

1: Напишите «классы» для функциональности и передайте элементы для изменения в конструктор, будь то идентификатор элемента или сам элемент, на ваше усмотрение.

2: Записывать «события» для разделов, которые могут различаться в зависимости от страницы или элемента управления. Под событиями я имею в виду просто методы-заполнители, которые вы можете заменить фактическими функциями. Итак, для примеров ...

var FilterControl = function() {

    //the "event"
    var self = this;
    this.onLoadComplete = function() { };

    //This is the command that calls the event
    this.load = function() {
        //do some work
        ...

        //Call the event
        self.onLoadComplete();
    };
};

//somewhere else in the code
var filter = new FilterControl();
filter.onLoadComplete = function() {
    //unique calls just for this control
};

3: Получите среду IDE, более дружественную к Javascript. Я люблю моя Visual Studio, но Апанта создает выдающуюся среду IDE, которая имеет действительно мощную среду разработки Javascript (она позволяет перетаскивать файлы .JS в диалоговое окно Ссылки на файлы, поэтому вы получаете intellisense для всех этих документов Javascript, решая одну из основных причин, почему это сложно разделить Javascript!

Если я правильно понимаю вопрос, у вас много HTML / javascript в одном блоке кода, и вы хотите их разделить.

Я бы использовал несколько приемов, чтобы получить четкое разделение:

  • Один JS-файл, содержащий скрипты / функции для каждой группы действий.
  • Один JS-файл, содержащий все стандартные функции (XML-парсер, утилиты ...)
  • Один JS-файл, который (лениво) загружает определенный скрипт (элемент №1 здесь) и присоединяет любые события к элементам current при загрузке документа.

Основная проблема заключается в том, чтобы прикрепить к сгенерированному коду функции / события на лету. IIRC, JQuery может справиться с этим, но не уверен.

Надеюсь, это поможет.

Мне не нравится форматирование на клиенте, поэтому я всегда стараюсь возвращать HTML из обратных вызовов AJAX, если, например, мне действительно не нужны данные для списка выбора.

Причина в том, что у меня есть богатый набор инструментов на сервере (ASP) для создания HTML и ничего на клиенте. Я использую настраиваемую «динамическую страницу» на сервере, которая содержит «динамический элемент управления», содержащий шаблон для данных, которые я хочу отформатировать. Со страницы выводится только содержимое этого элемента управления.

Веб-служба, которую вызывает AJAX, просто выполняет: return Execute (some-dynamic-page). Аргументы веб-службы передаются динамической странице либо в пакете HttpContext, либо в строке запроса.

Мне легче создать новый шаблон динамической страницы на сервере с помощью элементов управления перетаскиванием, чем с использованием клиентского шаблона или преобразователя xml. Я не использовал ни один инструмент для создания шаблонов или инструменты Jxxxx - возможно, они облегчают боль.

Используя этот метод, вы можете использовать то же разделение (MVP / MVC или просто код программной части), что и обычно.

Другие вопросы по теме