#javascript #xml #sapui5
#javascript #xml #sapui5
Вопрос:
У меня проблема с получением таблицы значений sapui5
. Я хочу, чтобы при нажатии кнопки updatebutton я получал индекс выбранной строки и получал значение для каждого столбца.
Это мой код:
updateButton : function(evt) {
var oTable = this.getView().byId("tabelFaktor");
var iIdx = oTable.getSelectedIndex();
},
Это мой XML-код:
<Table id="tabelFaktor"
selectionChange="handleSelectionChange"
mode="MultiSelect"
inset="false"
items="{
path: '/',
sorter: {
path: 'Name'
}
}">
<columns>
<Column
width="12em"
hAlign="Center">
<Text text="TMT FAKTOR" />
</Column>
<Column
minScreenWidth="Tablet"
demandPopin="true"
hAlign="Center">
<Text text="TAHUN MI" />
</Column>
<Column
minScreenWidth="Tablet"
demandPopin="true"
hAlign="Center">
<Text text="KODE KELOMPOK" />
</Column>
<Column
minScreenWidth="Tablet"
demandPopin="true"
hAlign="Center">
<Text text="KODE PRODUK" />
</Column>
<Column
hAlign="Center">
<Text text="MASA IURAN" />
</Column>
<Column
hAlign="Center">
<Text text="NILAI" />
</Column>
<Column
hAlign="Center">
<Text text="NILAI1" />
</Column>
<Column
hAlign="Center">
<Text text="NILAI2" />
</Column>
</columns>
<items>
<ColumnListItem>
<cells>
<ObjectIdentifier
text="{tmtFaktor}"/>
<Text
text="{tahunMI}" />
<Text
text="{kodeKelompok}" />
<Text
text="{kodeProduk}" />
<Text
text="{masaIuran}" />
<Text
text="{nilai}" />
<Text
text="{nilai1}" />
<Text
text="{nilai2}" />
</cells>
</ColumnListItem>
</items>
</Table>
Как решить эту проблему?
Спасибо.
С уважением, Бобби
Комментарии:
1. Я не вижу кнопки (должна ли она отображаться в каждой строке или только в заголовке таблицы? Кроме того, вы установили
mode=MultiSelect
так, что потенциально вы получите несколько строк, а не 1, что противоречит вашему требованию
Ответ №1:
Предполагая, что ваша таблица является таблицей sap.m., вы можете получить доступ к текущим выбранным значениям строк / ячеек следующим образом:
var selectedItem = oTable.getSelectedItem();
var oCells = selectedItem.getCells();
var keys = [];
var values = [];
for (var i = 0; i < oCells.length; i ) {
// key = field name in model
keys.push(oCells[i].getBindingPath("text"));
// value = field value in model
values.push(oCells[i].getText());
}
Я надеюсь, что это поможет.
С наилучшими пожеланиями, Себастьян
Комментарии:
1. Дорогой Себастьян,
2. Дорогой Себастьян, спасибо за твой ответ. Когда я пробую ваш код, я получаю значение последнего столбца в выбранной строке. Как получить все значения в каждой выбранной строке столбца? Спасибо. С уважением, Бобби
3. Дорогой Себастьян,
4. Дорогой Себастьян, спасибо тебе.. Я получаю все значения в каждом столбце для выбранной строки..
5. Привет, Бобби, я обновил фрагмент кода, чтобы ты мог получить все значения в массиве. Получен ли ответ на ваш вопрос? Бр, Себастьян
Ответ №2:
Я бы не советовал зацикливаться на содержимом ячейки; чтобы следовать принципам MVC, вы всегда должны извлекать данные из модели, а не из элемента управления пользовательского интерфейса.
В конечном итоге ваш код также станет намного более читабельным:
var selectedRowdata = oTable.getSelectedContexts()[0].getObject();
(Примечание: Я предположил, что у вас есть только один выбор. Если у вас есть несколько вариантов выбора, не используйте [0]
для получения первой (то есть только одной) строки, а выполняйте цикл по массиву, возвращаемому getSelectedContexts()
)