2012-02-12 67 views
1

我有一個<li>與可能性拖放每個項目重新排序,並存儲新等級的DB重新排序按日期與阿賈克斯jQuery的

下面的代碼:

$(document).ready(function() { 

    $('#reorder').sortable({ 
     opacity: 0.6, 
     data:$(this).sortable("serialize"), 
     cursor: 'move', 
     tolerance: 'pointer', 
     revert: true, 
     placeholder: 'state', 
     forcePlaceholderSize: true, 
     update: function(e, ui){ 
      newRank = $(this).sortable("serialize"); 
       console.log(newRank); 
       $.ajax({ 
       url: base_url + "/admin/rank/", 
       type: "POST", 
       data: newRank, 
       complete: function(success){ 
        $("#message").html('<span class="success">file ordered</span>'); 
       }, 
       error: function(error){ 
        $("#message").html('<span class="success">file not ordered</span>'); 
       } 
       }); 
     } 
    }); 

}); 

然後調用控制器:

function save_rank() 
{ 
    $items = $this->input->post('item'); 
    $total_items = count($this->input->post('item')); 

    for($item = 0; $item < $total_items; $item++) 
     { 

     $data = array(
      'project_id' => $items[$item], 
      'rank' => $item 
     ); 

     $this->db->where('project_id', $data['project_id']); 
     $this->db->update('ft_projects', $data); 
    } 
} 

這種運作良好,並通過他們的級別重新安排我的項目(DB我有一個名爲RANK,因爲他們斷定列每個項目的離子)

但現在我想提出一個按鈕,通過它們的日期(存儲在數據庫進行重新排序過),所以實際上改變RANK COLUMN有由DATE,而不是實際的等級排序的項(由由用戶舉例)

+1

如果重新排序在客戶端,我們將需要看到您的標記我猜。 – 2012-02-12 09:10:51

回答

0

要重新排序你的li s你只需要detach他們並重新插入(append)在父元素再次。如果日期是在你的數據庫,你將不得不作出一個AJAX調用來檢索他們按下重新排序按鈕時,並在其回調做這些操作:

  1. 分離每li;
  2. 通過您的ajax數據循環,找到哪個li對應於排序的項目;
  3. 將其追回。

雖然最好是緩存這個日期信息,恕我直言,所以「按下按鈕」和「元素重新排序」之間的延遲不會太長。如果您想將其他數據存儲到元素,但不顯示它,則可以使用jQuery的data函數。

+0

這樣做的竅門;) – user990463 2012-02-13 10:25:52