2014-08-30 1 views
0

Я создал приложение SAPUI5, в котором я загрузил данные из внешнего XML-файла в таблицу, все было в порядке. Теперь я пытаюсь удалить определенную строку из этой таблицы. Для этой цели я использую этот код:Как удалить строку из таблицы в приложении SAPUI5, когда я использовал модель как XMLModel?

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

Возможный дубликат [Кнопка для удаления строки из таблицы SAPUI5] (https://stackoverflow.com/questions/48521618/button-to-remove-row-from-sapui5-table) – boghyon

ответ

0

var data = m.getData();

данные не являются массивом. Это документ XML.

Чтобы удалить запись из документа:

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

Hello Allen, Большое спасибо, он отлично работает. Thanks, Nag – user3624736

+0

Рад помочь. Не могли бы вы отметить, что ответили так, что другие, у кого есть тот же вопрос, могут видеть статус? – Allen

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(); 
} 

Таким образом, вы сохраните hazzle работы с XML-структурой и, кроме того, это будет масштабироваться при любом изменении связывания пути вы могли бы ввести в будущем.

BR Chris

+0

Здравствуйте, Chris, Огромное вам спасибо, Здесь я использую модель как XMLModel, таблица, данные которой поступают из XMLModel. Мне нужно удалить строку (которую я выбираю для удаления) из таблицы, а также XMLModel. Пожалуйста, помогите мне, как это сделать. Спасибо и с уважением, Наг. – user3624736

+0

код выше делает именно это ?! Что вам не хватает? – cschuff

+0

Hi Chris, Когда я применяю вышеуказанный код, который вы указали, строка удаляется из таблицы, а не из XMLModel. Я хочу также удалить из документа XMl. Например, предположим, что таблица имеет 3 строки, которые сделаны с этим XML, если я удаляю любую одну строку из таблицы, эту же строку нужно удалить из xml. Спасибо. – user3624736

Смежные вопросы