当我使用Model作为XMLModel时,如何从SAPUI5应用程序中的表中删除行?

时间:2014-08-30 11:23:09

标签: sapui5

我已经创建了SAPUI5应用程序,因为我已将外部.xml文件中的数据加载到表中,没关系。现在,我试图从该表中删除一个特定的行。 为此,我使用此代码:

var oModel = new sap.ui.model.xml.XMLModel();
oModel.loadData("Deployments.xml", "", false);
sap.ui.getCore().setModel(oModel);
oTable.bindRows("/service");   // here "service"  is the root element of xml file
    var oTable = new sap.ui.commons.Button({
    text: "Delete Service",
    press: function() {
        var idx = oTable.getSelectedIndex();
        if (idx !== -1) {
            var m = oTable.getModel();
            var data = m.getData();
            var removed = data.splice(idx, 1); // error showing at this line
            m.setData(data);
            sap.m.MessageToast.show(JSON.stringify(removed[0]) + 'is removed');

        } else {
            sap.m.MessageToast.show('Please select a row');
        }
    }
});

但是,我收到了错误:var removed = data.splice(idx, 1);。但是,当模型是JSON时,相同的代码是有用的。当模型XMLModel?

时,如何从表中删除特定行?

2 个答案:

答案 0 :(得分:1)

使用绑定BindingPath来操作属于特定绑定的数据更加可靠。以下是适用于XMLModel的改编样本:

press: function() {
    var iIdx = oTable.getSelectedIndex();
    var sPath = oTable.getContextByIndex(iIdx).getPath();
    var oObj = oTable.getModel().getObject(sPath);
    oObj.remove();
    oTable.getModel().refresh();
}

通过这种方式,您可以节省处理XML结构的麻烦,此外,这将随着您将来可能引入的绑定路径的任何更改而扩展。

BR 克里斯

答案 1 :(得分:0)

var data = m.getData();

数据不是数组。它是一个XML文档。

从文档中删除条目:

var root = data.childNodes[0];
var aEntry = root.getElementsByTagName("entry");
root.removeChild(aEntry[idx]);