Как сделать графический интерфейс на основе AJAX с использованием Zend Framework - PullRequest
4 голосов
/ 04 февраля 2011

У меня есть приложение, созданное с использованием Zend Framework.Я решил пойти с JQuery вместо Dojo.Я использую помощники ZendX для таких вещей, как ajaxLinks и dialogContainers.Я хочу попробовать сделать графический интерфейс как AJAX, насколько это возможно.Но я борюсь с выбором того, что я считаю лучшим подходом.В большинстве случаев речь идет о загрузке «страницы» в dialogContainer, а не о перезагрузке всей страницы.Так, например, вы получаете диалоговое окно, содержащее форму для изменения некоторых пользовательских данных или чего-то подобного.

Сначала я вернул всю страницу, но если она запрашивалась с помощью запроса AJAX, он использовал другой шаблон макета, чтобы избежатьвсе непонятные javascript-включения и т. д. Это позволило мне создать одну версию страницы, которая в основном была бы доступна для просмотра, как обычно, И через AJAX.Но я не убедил себя, что мне это нравится.Глядя на графический интерфейс Zend Server, они, похоже, делают это, но не возвращают данные, закодированные в json, и строят страницу из этого.

Каков наилучший подход для этого и как я должен обрабатывать JavaScript, специфичный для извлеченныхстраница?Теперь у меня есть весь специфичный для страницы javascript в файле phtml этой страницы.

Еще одна вещь, которая меня беспокоит, - как отслеживать ресурсы, создаваемые при открытии большого количества диалоговых контейнеров и заполнении их через ajax,Допустим, мы открываем одно диалоговое окно и получаем список элементов.Если мы щелкнем еще одно модальное диалоговое окно контейнера всплывающего окна для этого конкретного элемента и заполняется через ajaxНо если главная страница никогда не перезагружается, я вижу, что с этим становится трудно справиться.

Такое ощущение, что я не могу быть первым, кто хочет создать пользовательский интерфейс, управляемый ajax, поэтому, пожалуйста, покажите мне правильное направление, прежде чем янарисовать себя в углу.;)

Обновление: я в основном пробовал все виды учебников, которые я мог найти по теме контекста, а также по документации в Zend.Я думаю, что я, должно быть, пропустил, чтобы включить некоторые недокументированные функции или что-то.Так как это не сработало, я удалил код, но, пытаясь найти примеры, на которые я смотрел, прежде чем я попробовал что-то вроде нижеприведенного кода.

$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('list', 'html')
            ->addActionContext('modify', 'html')
            ->initContext();

И я попробовал что-то вроде следующего

$this->_helper->contextSwitch()
     ->setContext('html', array(
                 'suffix'    => 'html',
                 'headers'   => array('Content-Type' => 'text/html; Charset=UTF-8'),
)
         )
     ->addActionContext('index', array('html','xml', 'json'))
     ->setAutoJsonSerialization(true)
     ->initContext(); 

Я пытался добавить другие ActionContexts и т. Д., Но независимо от того, что все они просто заканчивали рендерингом нормального файла .phtml все время.

1 Ответ

1 голос
/ 16 февраля 2011

Вот что я узнал, когда создавал свое приложение ZF / Ajax.

Для данных HTML:

Вы можете использовать помощник действий ActiionContext ( ZF Reference ).Вы можете добавить контекст AJAX к своим действиям.Я использую это в функции контроллера init ().

$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('myaction', 'html')->initContext('html');

При вызове myactionAction () он проверяет, сделан ли запрос с помощью вызова AJAX.Если это так, он отключает макет и отображает «myaction. ajax .phtml», а не «myaction.phtml», как если бы это был не вызов AJAX.Таким образом, вы можете получить чистый HTML-вывод из действия без каких-либо дополнительных действий, вам не нужно писать код проверки типа запроса в каждом действии.Я нашел, что вообще легко работать.

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

$this->headScript()->appendFile("/js/list.js");
echo $this->headScript(); 

Этот JavaScript затем выполняется как обычно.

Для данных JSON

JSON Action Helper очень быстро и легко использовать в действии для возврата данных JSON.

$r = "Success"; 
$this->_helper->json($r);

Это также возвращает чистый JSON и ничего больше.

Полагаю, более конкретный вопрос поможет вам получить лучшие ответы.

...