2011-07-07 9 views
2

非常に単純なアプリケーションを構築することで、EXTjs 4を教えています。EXTjs 4ドラッグ&ドロップのプラグインイベントの起点と目的地を見つける

EXTjs 4では、グリッドからグリッドにドラッグ&ドロップするプラグインが4つあります。 (ここでは例の機能:http://dev.sencha.com/deploy/ext-4.0.2a/examples/dd/dnd_grid_to_grid.html)私の見解では

私は、プラグインのような定義されています:

viewConfig: { 
    plugins: { 
     ptype: 'gridviewdragdrop', 
     dragGroup: 'ddzone', 
     dropGroup: 'ddzone' 
    } 
}, 

今の例では、それらが異なるdragGroupsとdropGroupsを持っていますが、私はしたいので、アイテムをドラッグします/私は、お互いに流動的に落として、グループに同じ名前を付けました。

Shows 3 of the 4 grids and how the items could be moved from grid to grid

情報は、もともと4つの異なるリストに取り込まれます方法はデシベルでSTATE_IDを調べることです。すべてのstate_ids 1は、バックログストア、2 In Progressストアなどに入ります。

アイテムをドラッグ/ドロップしたときに必要なことは、古いストアから削除して新しいストアに配置することです(state_idを同時に更新するので、後でdbと同期することができます)。

私の唯一の問題は、移動した行の原点グリッドと移動先グリッドを計算することです。

ありがとうございました!

PS。

dropit: function (node, data, dropRec, dropPosition) { 
    console.log('this'); 
    console.log(this); 
    console.log('node'); 
    console.log(node); 
    console.log('data'); 
    console.log(data); 
    console.log('droprec'); 
    console.log(dropRec); 
    console.log('dropPosition'); 
    console.log(dropPosition); 
}, 

あなたが見ることができるように、私は非常に遠くもらっていない^ _^

+0

実際、Ext.ComponentManager.allを使って掘り下げてみましたが、正しいストアに移動したようです。私は実際にはストアのstate_idフィールドを正しい値に更新するだけです。 – Robodude

答えて

0

さてさて、私は考え出した:あなたは好奇心旺盛であれば、これは私のドロップイベントハンドラは、現時点では次のようになります理想的少ないし、のようです...誰かが、私はこのようにそれをやって立ち往生することがあります優れたソリューション提供まで、それはそう働くそれを行う方法:

dropit: function (node, data, dropRec, dropPosition) { 
    if (node.dragData.records[0].store.$className == "AM.store.BacklogCards") 
    { 
     data.records[0].set('state_id', 1); 
     this.getBacklogCardsStore().sync(); 
    } 
    else if (node.dragData.records[0].store.$className == "AM.store.InprogressCards") 
    { 
     data.records[0].set('state_id', 2); 
     this.getInprogressCardsStore().sync(); 
    } 
    else if (node.dragData.records[0].store.$className == "AM.store.ReviewCards") 
    { 
     data.records[0].set('state_id', 3); 
     this.getReviewCardsStore().sync(); 
    } 
    else 
    { 
     data.records[0].set('state_id', 4); 
     this.getDoneCardsStore().sync(); 
    } 

私は[そのnode.dragData.recordsに気づきました0] .store。$ classNameは、グリッドの基底となる定義済みのストアを指します。

data.records [0] .set( 'state_id'、1);を使用します。移動された行のstate_idを設定し、最後にsync関数を呼び出してdbを新しい行情報で更新します。

+1

私は私の答えが嫌い - _ - それは動作しますが、私はそれを修正するために行くための '正しい'方法ではないという強い感情を持っています。 – Robodude

関連する問題