2013-07-08 69 views
2

我試圖允許拖放兩個不同的網格重新排序。SDK2:重新排列組合對象

這似乎並沒有在RC1中工作(雖然在同一個網格內工作),所以我試圖在網格上自己拖放排名。

這似乎相當簡單,我只需添加:

viewConfig: { 
      plugins: { 
        ptype: 'gridviewdragdrop', 
        dragGroup: dd1, 
        dropGroup: dd2 
      } 
} 

現在我可以拖動和整個電網下降(儘管它並不完全遵循拉力賽風格指南)。不幸的是,這本身並不能保存結果。爲此我需要定義一個下拉監聽器:

  listeners: { 
        drop: function(node, data, dropRec, dropPosition) { 
         var dropOn = dropRec ? ' ' + dropPosition + ' ' + dropRec.get('ObjectID') : ' on empty view'; 

         console.log('Dropped ' + data.records[0].get('ObjectID') + dropOn); 

       } 
       } 

但是,如何重新排列掉落的記錄?通過檢查正常積壓情況下集會如何操作,看起來在Rally WSAPI中有「rankAbove」和「rankBelow」命令,但是如何在我的drop功能中調用它們?如果我只是更新一個常規字段,我想我可以只是調用record.set(),但是對於排名,我需要做這些特殊調用之一,並給出記錄,我不知道如何。

回答

1

不錯的工作佈線在網格之間拖放!對於排名,你可能希望看看Rally.data.Ranker Singleton。它被定義爲私人。它在Drag'n'Drop Ranking Plugin中用於Rally.ui.grid.Grid

隨着排名器,你可以實現類似下面的示例東西(調整到您自己的環境,當然):

listeners: { 
drop: function(node, dragData, droppedOnRec, dropPosition) { 
    var draggedRec = dragData.records[0]; 

    var dropOn = droppedOnRec ? ' ' + dropPosition + ' ' + droppedOnRec.get('FormattedID') : ' on empty view'; 

    console.log('Dropped ' + draggedRec.get('FormattedID') + dropOn); 

    if (draggedRec && droppedOnRec) { 
     console.log("what is this?", this.title, this.releaseRef, dropPosition, droppedOnRec); 

     draggedRec.set('Release', this.releaseRef); 

     Rally.data.Ranker.rankRelative({ 
      recordToRank: draggedRec, 
      relativeRecord: droppedOnRec, 
      position: dropPosition, 
      saveOptions: { 
       callback: function() {console.log('saved');} 
      } 
     }); 
    } else { 
     console.log('no drop', draggedRec, droppedOnRe, dropPosition); 
    } 
}, 
+0

我得到的代碼工作,我已經更新您的解決方案somewhat--感謝!剩下的一個問題是,拖放圖標似乎被搞亂了 - 我想這是因爲它們仍然被拖拽的拖拽默認值所覆蓋。 – kimon

+0

感謝您的編輯!不幸的是,他們在我有機會審查之前被一些主持人拒絕了...也許在第二個後續答案中發帖。乾杯。 – 2013-07-09 22:08:54

+0

其實它看起來像我可以重寫版主並接受您的編輯。完成! – 2013-07-09 22:17:28