2016-05-13 7 views
0

removeAllの動作が奇妙です。私はExtJS 4.2を使用していますが、他の新しいバージョンでも同じことが起こるかどうかはわかりません。 は、私は、グリッドのtbarの内側にこのコードを持っている:私は削除しようとするとExtJS removeAllが機能しない

{ 
itemId: 'delete', 
text: 'Delete', 
iconCls: 'icon-delete', 
disabled: true, 
handler: function() { 
    var selection = this.up('grid').getView().getSelectionModel().getSelection()[0]; 
    if (selection) { 
     var numItems = storeProdutos.data.items.length; 
     var store = this.up('grid').getStore(); 
     if(numItems != 0) { 
      // point 2 
      Ext.Msg.confirm('Confirm', 'Do you want to delete?', function(button){ 
       if(button === 'yes') { 
        gridProduto.getStore().removeAll(); 
        store.remove(selection); 
        gridProduto.getStore().clearFilter(); 
        gridProduto.getStore().load(); 
        gridMercado.getSelectionModel().select(0); 
       } 
      }); 
     } else { 
      store.remove(selection); 
      gridProduto.getStore().clearFilter(); 
      gridProduto.getStore().load(); 
      gridMercado.getSelectionModel().select(0); 
     } 
    } 
} 
} 

それがメッセージボックスに表示され、私はそう言います。
そして、それはstore.remove(選択)が削除されますが、それはgridProduto.getStore.removeAll()は削除されません。奇妙なことは、PHPの削除スクリプトではすべて正常に行ったことです。
gridProduto.getStore.removeAll()のコード2に置き換えてもう一度やり直すのが最も奇妙なことです。
私はそれがメッセージボックスと関係があると信じています。
これをどのように修正できますか?

PS:私の店にはajaxで削除用のプロキシがあります。

storeProdutos = Ext.create('Ext.data.Store',{ 
... 
proxy: { 
      type: 'ajax', 
      api: { 
       destroy: '/path/someScript.php' 
      } 
} 
} 

答えて

1

ここでsync()をtrueに設定していると思いますが、どこでもsync()を呼び出さないためです。

問題は、sync(removeAllによってトリガーされる)とload操作でのタイミングです。ポイント2にremoveAllを入力すると、loadをトリガーするメッセージボックスをクリックする前にremoveAllが実行され、終了します。しかし、ここでは、Ajaxの2つのコール、つまりremoveAllコールとloadコールの両方を同時に開始します。ストアはデフォルトで非同期にコールを開始するため、最後のコールだけが実行されます。

あなたはどちらかだけ削除コールバックから、このような店舗やロードからオートシンクを除去することで、私は、より良いハックを検討、または同期ストアを作ることによってこの問題を解決することができ

gridProduto.getStore().removeAll(); 
gridProduto.getStore().sync({ 
    callback:function() { 
     store.remove(selection); 
     gridProduto.getStore().clearFilter(); 
     gridProduto.getStore().load(); 
     gridMercado.getSelectionModel().select(0); 
    } 
}); 
+0

は私がすることができますautoSyncをtrueのままにして、どちらかの方法で同期を行いますか? – alexandre1985

+0

できます。私はこれを見つけたhttp://stackoverflow.com/a/32391211/1930275 – alexandre1985

関連する問題