Как бэкэнд выглядит для вызова AjaxLink () в Zend Framework - PullRequest
2 голосов
/ 14 июня 2009

Я пытаюсь создать некоторую функциональность ajax в своем веб-приложении, но не могу подобрать все кусочки головоломки:

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

Я хочу сделать в соответствии с принципами Zend Framework, используя метод ajaxLink(). Может у кого-нибудь есть пример для меня? Я прочитал официальную документацию ( ZendX_JQuery ), но она мне не совсем помогает.

Мой код переднего плана (вида) выглядит так;

<?= $this->ajaxLink("Subscribe", $this->url(array('controller' => 'mycontroller', 'action' => 'action1', 'id' => $event['id'])),
                                        array("beforeSend" => "hide", 
                                              "update" => "#pb_" . $event['id'],
                                              'noscript' => false, 
                                              'method' => 'POST')); ?>  

Мой внутренний код выглядит следующим образом.

public function action1Action()
    {
        if( !$this->loggedIn || ! $this->athlete) {
            $this->_redirect('index');
        }
        if(! $this->_request->isXmlHttpRequest())
        {
            //The request was NOT made with JS XmlHttpRequest
            die;
        }
        // Do some administration
        // (removed to make this easier in this example)

        $pb = new Zend_Form_Element_Text('PB');
        $pb->setLabel('PB:')
                  ->addValidator('StringLength', false, array(0,20))
                  ->setRequired(false);
        $renderText = $pb->render();

        return $renderText;

    }

Я продолжаю получать сообщения о том, что данный метод хочет найти скрипт вида action1.phtml. Я также не уверен, что то, что я пытаюсь сделать с генерацией элемента ввода формы, работает таким образом.

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

Ответы [ 2 ]

2 голосов
/ 18 июня 2009

Вам нужно отключить ViewRenderer для этого конкретного действия. ZF по умолчанию включает Action Helper с именем ViewRenderer, который назначает условно названный скрипт вида (в вашем случае action1.phtml) определенному методу действия. Поскольку вы пытаетесь вернуть только небольшой фрагмент текста, а не полное представление сайта, полное представление не требуется. К счастью, это легко.

 public function action1Action(){
     $this->_helper->viewRenderer->setNoRender();
     // the rest of your code
 }

Полные документы здесь: http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#zend.controller.actionhelpers.viewrenderer

0 голосов
/ 14 июня 2009

В этом нет ничего. Все, что вам нужно сделать, это указать, откуда ваш контент. На ваш взгляд:

   <?= $this->ajaxLink("Example 1","/controller/action1", 
                                    array('update' => '#content', 
                                          'noscript' => false, 
                                          'method' => 'POST')); ?>

В вашем контроллере:

echo 'Some Content';

Читать это:

http://www.mikaelkael.fr/IMG/pdf/ZendX_Framework_1.7.x_EN.pdf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...