我已经创建了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?
答案 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]);