2016-01-12 82 views
0

要做好記錄更新我通常使用一個CRUD和存儲這樣的:在更新ajax請求 - 更新記錄不形

 storeId: 'storeId', 
     model: 'model', 
     pageSize: 10, 
     autoLoad: true, 

     proxy: { 
      type: 'ajax', 

      actionMethods: { 
       create: 'POST', 
       read: 'POST', 
       update: 'POST', 
       destroy: 'POST' 
      }, 

      api: { 
       create: 'php/crud.php?action=create', 
       read: 'php/crud.php?action=read', 
       update: 'php/crud.php?action=update', 
       destroy: 'php/crud.php?action=destroy' 
      }, 

      reader: { 
       type: 'json', 
       rootProperty: 'net', 
       totalProperty: 'total', 
       successProperty: 'success' 
      }, 

      writer: { 
       type: 'json', 
       writeAllFields: true, 
       encode: true, 
       rootProperty: 'net' 
      } 
     } 

邏輯:

var record = form.getRecord(); 
    record.set(values); 

    store.sync({ 
     success: function() { 

     }, 

     failure: function() { 

     }, 

     callback: function() { 
     }, 

    }); 

問題:只需更改數據庫列的值:是/否

我不想使用'destroy'刪除記錄,而是想通過'update'將數據庫表列的形式NO更改爲YES來禁用它。

在這種情況下,我沒有任何形式;只是一個刪除按鈕。

我嘗試沒有成功:

store.proxy.extraParams = { 
      sub_case: 'change_delete_state', 
      id_lista: id_lista 
    }, 

    store.sync({ 
     success: function() { 

     }, 

     failure: function() { 

     }, 

     callback: function() { 
     }, 

    }); 

和:

Ext.Ajax.request({ 
     url: 'php/crud.php?action=update', 
     params: { 
      sub_case: 'change_delete_state', 
      id_lista: id_lista 
     }, 
     success: function() { 
      store.commitChanges(); 
     }, 

     failure: function() { 

     }, 

     callback: function() { 
     }, 
    }); 

我會很感激的建議來解決這個問題。

編輯:

解決這樣的:

api: { 
     destroy: 'php/crud.php?action=destroy' 
    }, 

cliente端邏輯:

 // soft delete 
     store.proxy.extraParams = { 
      sub_case: 'change_delete_state', 
      id_lista: id_lista 
     }, 

     //or 
     // hard delete 
     store.proxy.extraParams = { 
      id_lista: id_lista 
     }, 

     store.remove(record); 
     store.sync({...}); 

服務器端(PHP):

case "destroy":{ 
    $record = stripslashes($_POST['net']); 
    $data = json_decode($record); 

    $id_lista = $data->{'id_lista'}; 

    if($_REQUEST['sub_case'] == "change_delete_state"){  
     $sqlQuery = "UPDATE ..."; 
     (...) 
    }else{ 
     $sqlQuery = "DELETE ..."; 
     (...) 
     } 
} 

回答

1

你充分如果隱藏服務器上的數據庫邏輯,則關閉儘可能在呃方面。

因此,如果您只有一種方法可以擺脫前端的記錄,並且該記錄應該從商店中刪除,那麼您只需將該「特殊」商店的銷燬api與特殊的API:

 api: { 
      create: 'php/crud.php?action=create', 
      read: 'php/crud.php?action=read', 
      update: 'php/crud.php?action=update', 
      destroy: 'php/crud.php?action=hide' // hide the record using a SQL update, and remove it from the client-side store; don't remove from server 
     }, 

當然,你將不得不插入特殊的邏輯到crud.php上做action=hide特殊處理。

如果你想有兩種不同的方式,一種用於「硬刪除」,另一種用於「軟刪除」,但兩者都應該從商店中刪除,事情變得有點複雜。然後,您需要在服務器端處理的記錄中使用特殊的布爾「標誌」。

E.g.

fields:[{ 
    name:'hardDelete', 
    type:'bool', 
    defaultValue:false 
}] 

然後你會做某事。沿

if(hardDelete) record.set("hardDelete",true); 
store.remove(record); 
store.sync(

而在服務器端,你將不得不讀取該標誌,並根據其值。

+0

感謝亞歷山大的幫助,並指出正確的方向。問題解決了。我編輯了我的帖子。 – josei