0

如果以前有人问过这个问题,请原谅我,因为操作词是“this”,所以很难搜索。

我有一个点击事件绑定到一组具有相同类的 div,每个都需要相同的行为。在 jQuery 中,我会简单地使用$(this)来引用单击的元素。我似乎无法弄清楚如何让 CakePHP$(this)用作更新元素。

我的代码:(“更新”参数是有问题的)

$this->Js->get('.bookmark')->event('click',
    $this->Js->request(
        array('controller' => 'bookmarks', 'action' => 'add', $event['Event']['id']),
        array('async' => true, 'update' => 'this')
    )
);

谢谢

4

3 回答 3

4

我个人的意见 - 不要使用CakePHP JsHelper。不要误会我的意思,我喜欢 CakePHP 并且是 CakePHP 的粉丝,但是 - 在某些情况下,使用“正常”方式更容易。

例如,HTML 助手也可以创建divs,但我从来没有找到使用它而不是仅仅键入 s 的理由<div>

于 2013-08-31T02:04:30.460 回答
0

好吧,看起来我忽略了我可以在 JsHelper 函数中嵌入 javascript 的事实。$(this)那以及超出函数内部范围的事实$.ajax。所以,这是对我有用的解决方案。如您所见,事件方法的第二个参数是 javascript 和 PHP 的混合体,它在第一个实例中使用串联连接在一起。

$this->Js->get('.bookmark')->event('click',
    'var el = $(this);'.
    $this->Js->request(
        array('controller' => 'bookmarks', 'action' => 'add', $event['Event']['id']),
        array('async' => true, 'complete' => '$(el).addClass("bookmarked")')
    )
);
于 2013-08-31T07:43:18.753 回答
0

我之前将它用于选择列表(我为您的示例修改了它,所以我不能 100% 确定它是否有效),我不明白为什么它不适用于 click

把它放在视图的底部

$this->Js->get('#addBookmarkDiv')->event('click',  //put the div name that contains the input you're checking to see if it's clicked
    $this->Js->request(array(
        'controller'=>'bookmarks',
        'action'=>'add'
        ), array(
        'update'=>'#putdivhere', //div you want to update, possibly a div that displays bookmarks?
        'async' => true,
        'method' => 'post',
        'dataExpression'=>true,
        'data'=> $this->Js->serializeForm(array(
            'isForm' => false,
            'inline' => true
            ))
        ))
);

现在,在您的控制器中做您必须做的事情,并添加以下内容

 function add(){
    //do what ever it is you want to do with the sent data
    $this->set('bookmarks',$bookmarks);
    $this->layout = 'ajax';
 }

然后,创建一个视图以添加类似的东西。

//add.ctp

<?php foreach ($bookmarks as $bookmark): ?>
<li><?php echo $bookmark; ?></li
<?php endforeach; ?>
于 2013-08-31T04:14:12.883 回答