Sapui5 如何拖放表格的行

Sapui5 如何拖放表格的行,sapui5,Sapui5,在my view.xml文件中: <html:div class="container-fluid"> <html:div class="row"> <Table id="ConnectorModuleTable" items="{ path: '/datalist'}">

在my view.xml文件中:

<html:div class="container-fluid">   
    <html:div class="row">
              <Table id="ConnectorModuleTable"
                       items="{
                            path: '/datalist'}">
                        <columns>
                            <Column ><Text text="Connector Module"/></Column>
                            <Column ><Text text="Setting A"/></Column>
                            <Column ><Text text="Setting B"/></Column>
                            <Column ><Text text="Custom Pin"/></Column>
                            <Column ><Text text="Actions"/></Column>
                        </columns>

                    <items>
                        <ColumnListItem>
                            <cells>
                                <Text text="{Connectormodule}" wrapping="false" />
                                <Text text="{settingA}" wrapping="false" />
                                <Text text="{settingB}" wrapping="false" />
                                <Text text="{settingB}" wrapping="false" />
                            </cells>
                        </ColumnListItem>
                    </items>
                </Table>
   </html:div>
    </html:div>

我正在尝试拖放此表的行

我已将显示列表的文档中的链接引用为:

与我在控制器中应用的表格相同,如下所示:

attachDragAndDrop: function () {
    var oList = this.byId("MyTable");

    oList.addDragDropConfig(new DragInfo({
        sourceAggregation: "items"
    }));
    oList.addDragDropConfig(new DropInfo({
        targetAggregation: "items",
        dropPosition: "Between",
        dropLayout: "Vertical",
        drop: this.onDrop.bind(this)
    }));

},

onDrop: function (oInfo) {

    var oDragged = oInfo.getParameter("draggedControl"),
        oDropped = oInfo.getParameter("droppedControl"),
        sInsertPosition = oInfo.getParameter("dropPosition"),

        oDraggedParent = oDragged.getParent(),
        oDroppedParent = oDropped.getParent(),

        oDragModel = oDraggedParent.getModel(),
        oDropModel = oDroppedParent.getModel(),
        oDragModelData = oDragModel.getData(),
        oDropModelData = oDropModel.getData(),

        iDragPosition = oDraggedParent.indexOfItem(oDragged),
        iDropPosition = oDroppedParent.indexOfItem(oDropped);

    // remove the item
    var oItem = oDragModelData[iDragPosition];
    oDragModelData.splice(iDragPosition, 1);

    if (oDragModel === oDropModel && iDragPosition < iDropPosition) {
        iDropPosition--;
    }

    // insert the control in target aggregation
    if (sInsertPosition === "Before") {
        oDropModelData.splice(iDropPosition, 0, oItem);
    } else {
        oDropModelData.splice(iDropPosition + 1, 0, oItem);
    }

    if (oDragModel !== oDropModel) {
        oDragModel.setData(oDragModelData);
        oDropModel.setData(oDropModelData);
    } else {
        oDropModel.setData(oDropModelData);
    }
},

initData: function (datalist) {
    this.byId("MyTable").setModel(new JSONModel([
        datalist

    ]));

}
attachDragAndDrop:function(){
var oList=this.byId(“MyTable”);
oList.addDragDropConfig(新DragInfo({
sourceAggregation:“项目”
}));
oList.addDragDropConfig(新的DropInfo({
目标集合:“项目”,
dropPosition:“中间”,
液滴布局:“垂直”,
drop:this.onDrop.bind(this)
}));
},
onDrop:功能(oInfo){
var oDragged=oInfo.getParameter(“draggedControl”),
oDropped=oInfo.getParameter(“droppedControl”),
sInsertPosition=oInfo.getParameter(“dropPosition”),
oDraggedParent=oDragged.getParent(),
oDroppedParent=oDropped.getParent(),
odFragmodel=oDraggedParent.getModel(),
oDropModel=oDroppedParent.getModel(),
odfragmodeldata=odfragmodel.getData(),
oDropModelData=oDropModel.getData(),
iDragPosition=oDraggedParent.indexOfItem(oDragged),
IDROPPED=oDroppedParent.indexOfItem(oDropped);
//删除该项目
var oItem=oDragModelData[iDragPosition];
oDragModelData.拼接(iDragPosition,1);
if(odfragmodel==oDropModel&&iDragPosition
这里
datalist
的所有行数据都是JSON格式的(参考)


但是这不起作用,任何帮助或指导链接都很感谢

我在您的onDrop()中使用了以下视图,它起了作用。 你能描述一下,什么不起作用

<Table id="MyTable" items="{/}">
    <columns>
        <Column ><Text text="Connector Module"/></Column>
        <Column ><Text text="Setting A"/></Column>
        <Column ><Text text="Setting B"/></Column>
    </columns>
    <dragDropConfig>
        <dnd:DragDropInfo
                sourceAggregation="items"
                targetAggregation="items"
                dropPosition="Between"
                drop=".onDrop"/>
    </dragDropConfig>
    <items>
        <ColumnListItem>
            <cells>
                <Text text="{Connectormodule}" wrapping="false" />
                <Text text="{settingA}" wrapping="false" />
                <Text text="{settingB}" wrapping="false" />
                <Text text="{settingB}" wrapping="false" />
            </cells>
        </ColumnListItem>
    </items>
</Table>

您能看到原始表格中的数据吗? 模型的设置不正确:JSONModel构造函数需要一个对象,而不是
initData
函数中列出的数组。这对我来说似乎是个约束问题

我只是试着按如下方式修改您的代码,一切正常:

    onDrop: function (oInfo) {
        var oDragged = oInfo.getParameter("draggedControl"),
            oDropped = oInfo.getParameter("droppedControl"),
            sInsertPosition = oInfo.getParameter("dropPosition"),

            oDraggedParent = oDragged.getParent(),
            oDroppedParent = oDropped.getParent(),

            oDragModel = oDraggedParent.getModel(),
            oDropModel = oDroppedParent.getModel(),
            oDragModelData = oDragModel.getData(),
            oDropModelData = oDropModel.getData(),

            iDragPosition = oDraggedParent.indexOfItem(oDragged),
            iDropPosition = oDroppedParent.indexOfItem(oDropped);

        // remove the item
        var oItem = oDragModelData.datalist[iDragPosition];
        oDragModelData.datalist.splice(iDragPosition, 1);

        if (oDragModel === oDropModel && iDragPosition < iDropPosition) {
            iDropPosition--;
        }

        // insert the control in target aggregation
        if (sInsertPosition === "Before") {
            oDropModelData.datalist.splice(iDropPosition, 0, oItem);
        } else {
            oDropModelData.datalist.splice(iDropPosition + 1, 0, oItem);
        }

        if (oDragModel !== oDropModel) {
            oDragModel.setData(oDragModelData);
            oDropModel.setData(oDropModelData);
        } else {
            oDropModel.setData(oDropModelData);
        }
    },

    initData: function (datalist) {
        //just an example
        var oData = {
            datalist: [{
                Connectormodule: "one",
                settingA: "one",
                settingB: "one"
            }, {
                Connectormodule: "two",
                settingA: "two",
                settingB: "two"
            }, {
                Connectormodule: "three",
                settingA: "three",
                settingB: "three"
            }]
        };

        var oModel = new sap.ui.model.json.JSONModel(oData);
        this.byId("ConnectorModuleTable").setModel(oModel);
    },
onDrop:函数(oInfo){ var oDragged=oInfo.getParameter(“draggedControl”), oDropped=oInfo.getParameter(“droppedControl”), sInsertPosition=oInfo.getParameter(“dropPosition”), oDraggedParent=oDragged.getParent(), oDroppedParent=oDropped.getParent(), odFragmodel=oDraggedParent.getModel(), oDropModel=oDroppedParent.getModel(), odfragmodeldata=odfragmodel.getData(), oDropModelData=oDropModel.getData(), iDragPosition=oDraggedParent.indexOfItem(oDragged), IDROPPED=oDroppedParent.indexOfItem(oDropped); //删除该项目 var oItem=odFragmodelData.datalist[iDragPosition]; 数据列表拼接(iDragPosition,1); if(odfragmodel==oDropModel&&iDragPosition
我得到的数据是未定义的:-odfragmodeldata=(3)[未定义,未定义,未定义],odfragmodel=constructor{pSequentialImportCompleted:Promise,meventergistry:{…},mMessages:null,id:“id-158302908064-25”,oData:Array(3),…},。。。oDropModelData=(3)[未定义,未定义,未定义],oDropModel=constructor{pSequentialImportCompleted:Promise,meventergistry:{…},mMessages:null,id:“id-158302908064-25”,oData:Array(3),…}我得到的数据列表是:-0:{connectormodule:“Guide”,settingA:“1”,settingB:“2”,定制:}1:{connectormodule,设置a:“1”,设置B:“2左”,自定义:}a