美好的一天,
我非常适合使用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();',
)
);
答案 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助手的使用。