CakePHP 1.2.x - Ajax分页'下一页'没有更新,坚持2

时间:2014-04-09 08:40:42

标签: php cakephp cakephp-1.2

美好的一天,

我非常适合使用CakePHP 2.x,但我现在不得不使用更老的CakePHP 1.2.x应用程序。

我已经实现了一个Ajax分页,它对于第一页非常合适,但是“下一页”'链接永远不会超过第2页。因此,即使加载了第2页,我的分页器的下一个链接仍然保留在页面:2'。

不同之处在于我的paginator链接是GLOBAL。我没有加载分页链接作为新DOM注入HTML的一部分。分页器链接位于我的ajax容器之外,并且在单击时将内容加载到容器中。分页器链接未加载到该容器中。

我很清楚CakePHP 2.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(); ?>

任何帮助都将受到极大的赞赏。

西蒙


更新:在head和Ajax视图代码中添加JS代码

头部加载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-&gt; link(&#39; jquery.cookie.js&#39;,false); $ javascript-&gt; link(&#39; jquery.tweet.js&#39;,false);     $ javascript-&gt; link(&#39; flowplayer.min.js&#39;,false);     $ javascript-&gt; link(&#39; jquery.validate.min.js&#39;,false);     $ javascript-&gt; link(&#39; coin-slider.min.js&#39;,false);     $ javascript-&gt; link(&#39; jquery.thslide.min.js&#39;,false);     $ javascript-&gt; link(&#39; jquery.barousel.min.js&#39;,false);     $ javascript-&gt; link(&#39; behaviour.js&#39;,false);     echo&#34;&#34 ;;     echo&#34;&#34 ;;     echo&#34; jQuery.noConflict();&#34 ;;

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();',
                        )
                    ); 

2 个答案:

答案 0 :(得分:0)

这是假的,因为我不熟悉蛋糕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以及分页导航链接的内容。

答案 1 :(得分:0)

Simon,怀疑发生的事情是你的click事件在document.ready()时被绑定到原始的DOM对象,所以当你的Ajax调用发生并且替换了分页内容时,事件不附加到替换DOM对象。

我知道在jQuery中你可以使用

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

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