2017-11-01 4 views
-1

製品を店から削除すると、製品が実際に削除される前にグリッドが更新されます。これにより、製品が削除された後でもグリッドに表示されます。これをどうすれば解決できますか?ExtJSの遅延グリッドリロード

deleteProduct: function (a, b, c, d, e, responseObject) { 
    var id = responseObject.data.ProductID; 
    var gridStore = Ext.getCmp('prodDetailsGrid').getStore(); 

    Ext.Msg.confirm("Confirmation", "Do you want to permanently delete this product?", function (btnText) { 
     if (btnText === "yes") { 
      Direct.Product.DeleteProduct(id); 
      Ext.toast('Product Deleted'); 
      var gridStore = Ext.getCmp('prodDetailsGrid').getStore(); 
      gridStore.load().delay(500); 
     } 
    }) 
} 
+0

をあなたはこちらに何が起こっているのか、問題を引き起こしているかを説明することはできますか? – Tejas

答えて

1

deleteProduct: function (a, b, c, d, e, responseObject) { 
    var id = responseObject.data.ProductID; 
    var gridStore = Ext.getCmp('prodDetailsGrid').getStore(); 

    Ext.Msg.confirm("Confirmation", "Do you want to permanently delete this product?", function (btnText) { 
     if (btnText === "yes") { 
      var gridStore = Ext.getCmp('prodDetailsGrid').getStore(); 
      Direct.Product.DeleteProduct(id,() => gridStore.load()); 
      Ext.toast('Product Deleted'); 
      gridStore.load(); 
     } 
    }) 
} 
0

私が理解する限り、最初に削除操作を実行し、削除応答が受信された後で、そのストアをリロードする必要があります。

これはコールバックを使用して実現できます。別のパラメータをDirect.Product.DeleteProductに渡すことができ、処理が終了した後に渡された関数を実行することができます。

DeleteProduct: function(id, callback) { 
    // predefined code 
    if(callback) { 
     callback(); 
    } 
} 

そうでない場合、また、あなたDeleteProduct方法はExt.Ajax呼び出しを使用している場合、あなたは常にExt.Ajax.requestの成功方法でコールバックを呼び出すことができます約束場合

Promise.resolve(Direct.Product.DeleteProduct(id)).then(function(response) 
{ 
    //Load the store 
}, function(error) { 
    //handle error case 
}) 

を使用することができます。

0

私自身の問題を解決することができました。彼は私のコードで変更したのは、バックエンドコントローラコールの前にgridStore varを追加することだけでした。なぜこれで問題ないのか分かりませんが、私は不平を言わないでしょう。要求が完了した後、あなたは負荷を呼び出す必要が

deleteProduct: function (a, b, c, d, e, responseObject) { 
    var id = responseObject.data.ProductID; 
    var gridStore = Ext.getCmp('prodDetailsGrid').getStore(); 

    Ext.Msg.confirm("Confirmation", "Do you want to permanently delete this product?", function (btnText) { 
     if (btnText === "yes") { 
      var gridStore = Ext.getCmp('prodDetailsGrid').getStore(); 
      Direct.Product.DeleteProduct(id); 
      Ext.toast('Product Deleted'); 
      gridStore.load(); 
     } 
    }) 
} 
+0

これは何の違いもありません。ロードを呼び出す前に要求が完了するまで待つ必要があります。 –

+0

ええ、それは何らかの理由ですべきではありませんでした。バックエンドのコントローラコールが終了した後、1つのコールを十分に遅らせて戻っていたようです。 – TigerDave