Found the fix myself...  truth is it WAS working.

The difference is that I had to place a # in front of the ID for Jquery
on the 'update' option...  so for prototype the call is 

echo $this->Js->link('up', 
  array( ... ),
  array('update'=>'vote_'.
        $comment['Comment']['id']));

For JQuery it becomes

echo $this->Js->link('up', 
  array( ... ),
  array('update'=>'#vote_'.
        $comment['Comment']['id']));

and it all updates as expected.

On Thu, 2011-01-20 at 17:00 +0000, Steve wrote:
> On Thu, 2011-01-20 at 03:03 -0800, Ratty wrote:
> > I am trying to use JQuery with CakePHP (1.3.6) using the JS helper.
> > 
> > I have a bit of code that works fine with the prototype library but
> > when I change the library to JQuery, it breaks. The correct function
> > in the controller class is definately called and the database update
> > in the function happens. But when the function calls $this-
> > >render('add_success','ajax'); at the end to render 'add_success.ctp'
> > using the 'ajax.ctp' layout... nothing happens.
> > 
> > Is there something I need to do to make JQuery work with the JS
> > library other than those detailed in the 1.3 Cookbook ?
> > 
> > I hope someone can help or at least point me in the right direction.
> > 
> 
> In case it helps...  Here are some code snippets of what I am trying to
> do.
> 
> app_controller.php calls registers the Js Helper accross the entire
> application ( I will localise this when I get it working ). To switch to
> JQuery I use 'Js'=>array('JQuery')
> 
> class AppController extends Controller {
>     ...
>     var $helpers = array( 'Form', 'Html', 'Js' => array('Prototype'));
>     ...
> }
> 
> 
> 
> default.ctp layout includes the javascript library and writes any
> buffered output just before </body>. Again, I change the 'prototype' to
> 'jquery'  ( I am using jquery-1.4.4 )
> 
> <head>
>       <title><?php echo $title_for_layout; ?></title>
>       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
>       <?php echo $html->css( 'global' ); ?>
>       <?php echo $this->Html->script('prototype');?>
> </head>
> <body>
> <div id="container">
>   <div id="content">
>     <div id="content_left">
>         ...
>     </div>
>     <!-- end of content left -->
>     <div id="content_right">
>       <?php echo $content_for_layout ?>
>     </div>    
>     <!-- end of content right -->
>   </div>
>   <!-- end of content -->
>   <div id="footer"> 
>     ...
>   </div>
>   <!-- end of footer -->
> </div>
> <!-- end of container -->
> <?php echo $this->element('sql_dump'); ?>
> <?php echo $this->Js->writeBuffer(); ?>
> </body>
> </html>
> 
> 
> My comments controller allows comments to be added to a post. Each
> comment can also be voted on.
> 
> class CommentsController extends AppController {
> ...
>   function add() { 
>     if(!empty($this->data)){ 
>       $this->Comment->create();
>       if($this->Comment->save($this->data)) { 
>         $comments=$this->Comment->find('all', array(
>           'conditions'=>array(
>             'post_id'=>$this->data['Comment']['post_id']), 
>             'recursive'=>-1)); 
>       $this->set(compact('comments')); 
>       $this->render('add_success','ajax'); 
>       }else{ 
>         $this->render('add_failure','ajax'); 
>       } 
>     } 
>   }
>       
>   function vote($type=null,$id=null) { 
>     if($id){ 
>       $votes=$this->Comment->vote($type,$id); 
>       $this->set(compact('votes')); 
>       $this->render('votes','ajax'); 
>     } 
>   }
> 
>    ...
> }
> 
> add_success.ctp displays the comment just added.
> add_failure.ctp displays an error message
> votes.ctp displays the number of votes for the comment
> 
> The posts view displays a post and allows comments to be added and voted
> on through Js
> 
> <h1><?php echo $post['Post']['name'];?></h1> 
> <hr/> 
> <?php echo $bbcode->parse($post['Post']['content']); ?>
> <hr/>
> <h2>Comments</h2>
> <div id="comments">
> <?php foreach($comments as $comment): ?> 
>   <div class="comment">
>     <div id="vote_<?php echo $comment['Comment']['id'];?>"> 
>       <div class="cast_vote"> 
>         <ul> 
>           <li><?php echo $this->Js->link('up', array(
>                          'controller'=>'comments', 
>                          'action'=>'vote', 'up',
>                          $comment['Comment']['id']),
>                          array('update'=>'vote_'.
>                                $comment['Comment']['id']));
>              ?>
>           </li> 
>           <li><?php echo $this->Js->link('down',array(
>                          'controller'=>'comments', 
>                          'action'=>'vote', 'down',
>                          $comment['Comment']['id']),
>                          array('update'=>'vote_'.
>                                $comment['Comment']['id']));
>               ?>
>           </li> 
>         </ul> 
>       </div> 
>       <div class="vote">
>         <?php echo $comment['Comment']['votes'];?>
>       </div> 
>     </div>
>     <p><b><?php echo $comment['Comment']['name'];?></b></p> 
>     <p><?php echo $comment['Comment']['content'];?></p> 
>   </div> 
> <?php endforeach;?>
> <?php echo $form->create('Comment'); ?>
> <?php echo $form->input('name', array('label'=>'Enter your name'));?> 
> <?php echo $form->input('content', array('label'=>'Enter your
> comment'));?> 
> <?php echo
> $form->input('post_id',array('type'=>'hidden','value'=>$post['Post']['id']));?>
> <?php echo $js->submit('Add Comment', array('url' =>
> array('controller'=>'comments', 'action' => 'add' ),
> 'update'=>'comments')); ?>
> <?php echo $form->end();?>
> </div>
> 
> Nothing startling here. With prototype, the vote count goes up and down
> when the link is selected and added comments are displayed... but not
> with JQuery.
> 


-- 
Our newest site for the community: CakePHP Video Tutorials 
http://tv.cakephp.org 
Check out the new CakePHP Questions site http://ask.cakephp.org and help others 
with their CakePHP related questions.


To unsubscribe from this group, send email to
[email protected] For more options, visit this group at 
http://groups.google.com/group/cake-php

Reply via email to