cakephp的ajax默认绑定prototype,而本人接触js一开始就是jQuery控,闲话不多说,直接讲讲我用Js的helpers的引擎是jQuery库的过程。
echo $this->Html->script('jquery');
这句话就是开启了jQuery库的支持。并且需要app_controller.php里面添加Js helpers的支持。
echo $this->Js->writeBuffer(); // Write cached scripts
这句话要放在body标签结束前,特别是用ajax替换html页面内容时,这句话同样要出现在替换与被替换的内容中,尽量不要放在layout里面。
如果出了使用jQuery库之外,还要和其他库一起使用的话,
$this->Js->JqueryEngine->jQueryObject = '$j';
print $this->Html->scriptBlock('var $j = jQuery.noConflict();',
array('inline' => false)); //Tell jQuery to go into noconflict mode
以上准备好后,就开始可以使用Js engine。
我一般查看
http://api13.cakephp.org/class/js-base-engine-helper
http://api13.cakephp.org/class/js-helper,
还有http://book.cakephp.org/1.3/en/view/1596/Javascript-engine-usage这3个地方,了解API和用例。
下面是一个下拉框值变化的时候提交表单的例子
<?php echo $this->Form->input('list1',array('type'=>'select','options'=>$cTaxonomy));?>
<?php
$this->Js->get('#TaxonomyList1')->event('change', $this->Js->request(
array('controller' => 'Products', 'action' => 'getTaxonomy'),
array(
'update' => '#searchProducts',
'async' => true,
'dataExpression' => true,
'method' => 'post',
'data' => $js->serializeForm(array('isForm' => false, 'inline' => true))
) ) );
?>
可以看到method是post的,我没有用get是因为不知道如何取得下拉框选中的值。
$this->Js->get('#element');
$result = $this->Js->effect('fadeIn');
//$result contains $("#foo").fadeIn();
还有effect事件,基本都可以使用jQuery里面内置的动画效果。
http://book.cakephp.org/1.3/en/view/1593/Methods 这个页面有详细的说明如何用。我就不再仔细详述了。