2016-08-31 5 views
0

В sap.ui.table.Table У меня есть поле ввода в одном столбце. Он получит около 300 записей данных из back-end и привязан в других столбцах.Как получить значения из ввода в sap.ui.table.Table?

Пользователь вводит данные вручную в поле ввода. Кроме того, когда он нажимает кнопку отправки, я должен принимать все значения из всех входных данных в виде массива. Пожалуйста, дайте предложения.

ответ

2

Вы можете сделать это с помощью привязки данных таблицы, как вызов getRows() на Table контроля доступа Input поля каждой строки не помогло бы в этом случае, она только возвращает только видимые в данный момент строки и у вас есть около 300 записей для доступа.

Вот решение:

  1. Получить все данные из заднего конца в JSONModel.
  2. Добавьте одно свойство: inputValue к каждому элементу в данных модели, итерации по нему.
  3. Привяжите эту модель к таблице и используйте inputValue свойство в шаблоне таблицы для связывания столбца, содержащего Input полей.

Как JSONModel поддерживает двухстороннее связывание, все значения, которые пользователь вписываться в Input полей доступны в вашей модели.

И, наконец, перебирайте данные модели, чтобы получить inputValue для каждой строки.

Вышеуказанные действия в действии:

Шаг 1 и 2:

setModelForTable: function() { 
    var oModel = sap.ui.model.json.JSONModel(<URLToLoadJSON>); 
    var length = oModel.getData().results.length; 

    for (var i = 0; i < length; i++) { 
     var path = "/results/" + i + "/inputValue"; 
     oModel.setProperty(path, ""); 
    } 
} 

Шаг 3:

Теперь, что у вас есть модель с InputValue собственности во всех элементов данных, установить модель на таблицу; который сначала отобразит все поля Input в столбцах, пустых, и обновит соответствующую запись модели, когда пользователь ее изменит.

<t:Column> 
    <t:label> 
     <Text text="User Input" /> 
    </t:label> 
    <t:template> 
     <Input value="{inputValue}" /> 
    </t:template> 
</t:Column> 

Наконец, получите все введенные значения в массиве.

var length = oModel.getData().results.length; 
var aInputvalues = [] 
for (var i = 0; i < length; i++) { 
    var path = "/results/" + i + "/inputValue"; 
    aInputvalues.push(oModel.getProperty(path)); 
} 
+0

Hi dopedev, Спасибо за предложение ur. Можете ли вы объяснить подробно? Пожалуйста, – user6757698

+0

Конечно, дай мне немного времени! – Dopedev

+0

Спасибо, допедев. Я использую sap.m.Input – user6757698

1

У меня был случай, который немного похож, и я сделал это следующим образом. Будет работать, если вам действительно не нужны записи, которые не изменены.

  1. имеет переменный для хранения [] измененных записей
  2. Attach изменения поля ввода
  3. на смену толчке изменил запись в переменный

    var source = event.getSource(); 
    source.getModel().getProperty(source.getBindingContext().getPath()); 
    

или значение поле ввода.

event.getSource().getValue(); 

Если у вас есть идентификатор записи, вы можете просто нажать этот идентификатор и ввести значение. 4. на отправке итерации по []