CakePHP 1.2.x-Ajax分页';下一页';不更新,停留在2上


CakePHP 1.2.x - Ajax Pagination 'Next Page' Does Not Update, Stays on 2

大家好,

我在使用CakePHP 2.x时非常自如,但目前我不得不使用一个旧得多的CakePHP 1.2.x应用程序。

我已经实现了Ajax分页,它对第一页非常有效,但是"下一页"链接永远不会超过第2页。因此,即使加载了第2页,我的分页器的下一个链接仍然是"page:2"。

不同的是,我的分页器链接是全局的。我不将分页链接作为新的DOM注入HTML的一部分来加载。分页器链接位于我的ajax容器之外,内容在单击时加载到容器中。分页器链接未加载到该容器中。

我很清楚CakePHP2.x使用$this->Js->WriteBuffer();方法打印出核心JS,据我所知,它用于更新分页链接。

据我所知,CakePHP 1.2.x没有这样的方法。

有人能对此提供一些线索或意见吗?

我包含的组件&助手:

var $components = array('RequestHandler');
var $helpers = array('Javascript', 'Html', 'Form', 'Paginator');

我的分页:

$paginator->next('<h3>Next Page </h3>',array('escape'=>false));

我有一个Ajax视图和用于这些Ajax负载的Ajax布局。Ajax视图只包含我想要加载的内容,实际上只是循环。ajax布局只是<?php echo $content_for_layout ?> 的一行

我已经把它放在ajax布局的末尾,但没有用:

<?php echo $javascript->writeEvents(); ?>

任何帮助都将不胜感激。

Simon


UPDATE:在head中添加JS代码,并添加Ajax视图代码

头加载JS:

$javascript->link('jquery-ui-1.8.13.custom.min.js', false);
$javascript->link('scrollads.js', false);
$javascript->link('jquery.form.js', false);
$javascript->link('jquery.form-defaults.js', false);
$javascript->link('jquery.jplayer.min.js', false);
$javascript->link('jquery.sparkline.min.js', false);

$javascript->link('jquery.cookie.js',false);$javascript->link('jquery.tweet.js',false);$javascript->link('flowplayer.min.js',false);$javascript->link('jquery.validate.min.js',false);$javascript->链接('in-slider.min.js',false);$javascript->链接('jquery.thslide.min.js',false);$javascript->link('jquery.barousel.min.js',false);$javascript->link('behaviour.js',false);echo";echo";echo"jQuery.noConflict();";

echo $asset->scripts_for_layout();

Ajax视图文件:

<?php foreach ($galleries as $gallery): ?>
                <div class="albumcontainer-wrapper">
                    <div class="albumcontainer-top"></div>
                        <div class="albumcontainer">
                            <a href="<?php echo Router::url('/gallery_images/index/'.$gallery['Gallery']['id']); ?>">
                                <?php echo $html->image($gallery['GalleryImage'][0]['Image']['default']['path_adjusted']); ?>
                            </a>
                            <h3><?php echo $gallery['Gallery']['title']; ?></h3>
                        </div>
                    <div class="albumcontainer-bottom"></div>
                </div>
            <?php endforeach; ?>
            <?php echo $javascript->WriteEvents(true); ?>

这就是我将ajax加载的视图附加到现有内容而不是替换它的方式:

$paginator->options(
                    array(
                        'update' => 'ajaxAppendGalleries', 
                        'indicator' => false,
                        'evalScripts' => true,
                        'complete' => 'var tmp = jQuery("#ajaxAppendGalleries").html(); jQuery("#galleryContainer").append(tmp); tmp = null; jQuery("#ajaxAppendGalleries").empty();',
                        )
                    ); 

这将是伪的,因为我不熟悉蛋糕1.2
尽管我认为其中一些是琐碎的,但这些都是应该"检查清单"的要点

在控制器的功能中:
请确保发送的json内容布局为空,并且没有调试信息。

在视图中,创建一个类似于以下的json结构:

data{
  paginationHtml: {htmlContent: /* here comes the output of the navigation-creation-function of the  paginator-helper*/, 
  anyOtherContent: ""},
  pageContentHtml: /* the iteration that print out the paged content itself */
}

在原始页面中,使用jquery加载内容并替换分页数据的innerHTML,以及分页导航链接的内容。

Simon,怀疑发生的事情是,当document.ready()时,您的点击事件被绑定到原始DOM对象,因此,当您的Ajax调用发生并且分页内容被替换时,事件不会附加到替换的DOM对象。

我知道在jQuery中你可以使用

$(document).on('event','#target',function(){})

语法,以确保事件永久绑定到页面上的所有对象,无论它们何时/如何加载,我今天确实在Cake Cookbook中看到了一个示例(向下滚动到Js::event),建议您可以使用它。。。尽管注意.bind()方法在当前版本的jQuery中已被弃用,但请改用.on()。恐怕我不知道这在1.2中是否可行,但如果必须的话,你可以用一些手动jQuery来增加对这个JS助手的使用。