Zend MVC - дизайн - onClick, загрузить новый вид?Вид внутри вида? - PullRequest
0 голосов
/ 25 ноября 2010

У меня есть страница, и эта страница исчезнет для отображения нового содержимого (из другого представления).

В общих чертах, что мы должны здесь учитывать?

Куда мне покопаться, чтобы сделать это возможным?

Должен ли я вызывать представление внутри другого представления, используя какой-то ajax?

class EquipasController extends OccControllerAction{

public function init(){

if ($this->getRequest()->isXMLHttpRequest()) {
 $this->_helper->layout()->setLayout('blank');
 //$this->_helper->layout()->disableLayout();
 $logger = $this->getInvokeArg('bootstrap')->getResource('Log');
 $logger->debug('AJAX Call');
}

}


public function listaAction()
{
    echo ("I'm HERE??");
   $dados = array('dados1', 'dados2', 'dados3');
}

}


<h1>Tests...</h1>

<a href="<?php echo $this->url(array("controller"=>"equipas","action"=>"lista"), null, true); ?>" class="ajaxloader">Mostra Lista Sff</a>
<div id="testresults">
    <h1>Esta é uma coisa que aparece sempre.</h1>
</div>

<script type="text/javascript">
$(function() {
        $('.ajaxloader').click(function(event) {
            var target = $(this).attr('href');
            window.location.hash = target;
            $.ajax({
                  url: target,
                  success: function(data) {
                    $('#testresults').html(data);
                  }
                });
            return false;
        });
    });
</script>

Когда я впервые загружаю страницу, все ок. Когда я нажимаю на ссылку, я фактически получаю вызов ajax (потому что я не замечаю обновления). Когда он отображается, он снова отображает всю страницу.

Это не отображает эхо, которое я поместил в listaAction! : - (

UPDATE

Когда я вижу URL своей ссылки в браузере, я вижу: http://mypage.org/equipas/registo#/equipas/lista

На якоре у меня есть: http://mypage.org/equipas/lista

Может ли проблема быть здесь?

Ответы [ 2 ]

1 голос
/ 25 ноября 2010

Я делал именно эту вещь раньше.Вот урезанная версия того, что я делаю.

  1. Имеет «пустой» макет.Это исключает любой глобальный заголовок / content / css.

  2. Имеет «умный» контроллер init() или плагин, который будет переключаться между вашим стандартным и пустым макетом, если запрос ajax.Вот мой (раздетый) код контроллера:

    класс TestController расширяет Zend_Controller_Action {

    public function init()
    {
        /* Initialize action controller here */
        if ($this->getRequest()->isXMLHttpRequest()) {
            $this->_helper->layout()->setLayout('blank');
            $logger = $this->getInvokeArg('bootstrap')->getResource('Log');
            $logger->debug('AJAX Call');
        }
    }
    
    
    public function indexAction()
    {
        // render the default page
    }
    
    
    public function speedAction()
    {
        // Do stuff render something
    }
    
    
    public function somethingelseAction()
    {
        // do something else render something.
    }
    

    }

  3. Первоначальный вид визуализации отображается сцелевой div, а также некоторые ссылки, которые вы хотите перейти на эту цель.Вот мой index.phtml:

    <code><h1>Tests...</h1>
            <a class="ajaxloader"
                href="<?php echo $this->url(array('controller'=> 'test', 'action' => 'speed'), null, true);?>">Speed</a>
            <a class="ajaxloader"
                href="<?php echo $this->url(array('controller'=> 'test', 'action' => 'somethingelse'), null, true);?>">Something Else</a>
            <div id="testresults">
            <h1>Default stuff to show.</h1>
            </div>
  4. Установите некоторый код jQuery (как вам нравится), чтобы прикрепить его к этим ссылкам 'ajaxloader' и настроить таргетинг на вашрезультаты к разделу «testresults»Вот некоторые основные JS:

    <code>
    $(function() {
    $('.ajaxloader').click(function(event) {
        var target = $(this).attr('href');
        window.location.hash = target;
        $('#testresults').fadeOut('slow', function() {
            // complete fadeout, load new content while it's hiding!
            $.ajax( {
                url : target,
                success : function(data) {
                    $('#testresults').html(data);
                    $('#testresults').fadeIn();
                }
            });
        });
        return false;
    })
    });</p>
    
    <p>

Все ссылки, по которым щелкнули класс 'ajaxloader', будут загружены через ajax и помещены в 'раздел результатов теста

0 голосов
/ 25 ноября 2010

Если ваша страница приводит к потере части , то вы должны использовать JavaScript (или CSS-анимацию или старые, ужасные свойства IE, теги meta).

Я бы использовал JavaScript, чтобы получить представление через AJAX и загрузить его в элемент на вашей странице.

...