2013-08-31 18 views
0

請原諒我以前曾詢問過,由於操作詞是'this',所以很難搜索。

我有一個單擊事件綁定到一組具有相同類的div,每個人都需要相同的行爲。在jQuery中,我會簡單地使用$(this)來引用clicked元素。我似乎無法弄清楚如何讓CakePHP使用$(this)作爲更新元素。

我的代碼(在 '更新' param是一個問題)

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

謝謝

+0

忘記JsHelper並直接寫jQuery代碼。它的功能相當有限,最終會讓你放慢速度,而不是加速你的發展。它已在CakePHP 3.0中刪除。 – ADmad

回答

4

我個人的意見 - 不使用CakePHP JsHelper。不要誤解我的意思,我喜歡CakePHP,並且是一名CakePHP粉絲,但是 - 在某些情況下,使用「正常」方式更容易。

作爲一個例子,HTML助手也可以創建div,但我從來沒有找到使用它的原因,只是打字<div>

+1

我開始自己得出這個結論。我喜歡嘗試所有'蛋糕的方式',但我認爲它可能更簡單,更具可讀性,並且只需將javascript編寫爲javascript即可。 (儘管我會讚賞使用div功能...) – aviemet

+0

是的 - 即使我們蛋糕愛好者不使用所有的幫手。 :) – Dave

0

我以前用過這個當選擇列表(我修改了它的你的榜樣,所以我不是100%肯定它的作品),我不明白爲什麼它不會對點擊

工作在視圖的底部將這個現在

$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; ?> 
+0

我試圖解決的問題涉及的情況下,你會將點擊事件綁定到div類,這麼多元素具有相同的行爲。在這種情況下,知道要更新哪個元素的唯一方法是訪問'this' var,因爲它可以是任意數量的可點擊元素。看起來,JsHelper上的所有文檔都假設我只有一個可點擊的元素,而且只有一個元素可能需要更新。 – aviemet

0

好吧,它看起來像我忽略了一個事實,即我可以在JsHelper函數中嵌入JavaScript。這和$.ajax函數中的$(this)超出範圍的事實。所以,這是爲我工作的解決方案。正如你所看到的,事件方法的第二個參數是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")') 
    ) 
);