2017-01-12 5 views
1

Я использую sap.m.Table, привязанную к модели OData. Я установил grow = "true" и growScrollToLoad = "true". Таким образом, пользовательский интерфейс выбирает только 20 строк за раз, когда пользователь прокручивается вниз. Я также использую таблицу в режиме множественного выбора, поэтому пользователь может выбрать некоторые (или все строки, используя флажок «Выбрать все»). Все это работает как ожидалось.Как узнать, когда пользователь выбрал все строки в sap.m.Table

Теперь я добавляю экспорт в Excel, и я вижу, что, когда пользователь выбирает флажок «Выбрать все», выбираются только те строки, которые находятся на клиенте. Например, если пользователь не прокручивается после получения данных, выбираются только первые 20 строк, даже если на заднем конце имеется сто записей. Мой план состоит в том, чтобы получить все данные из бэкэнд и экспортировать их в электронную таблицу, если отмечен флажок «Выбрать все», если не просто экспортировать выбранные строки. Вопрос в том, как узнать, когда отмечен флажок «Выбрать все»? Я не нашел API, который дает мне эту информацию. Есть ли лучший способ достичь этого? Я хотел бы услышать ваши мысли.

Спасибо.

ответ

0

Вы можете определить выпадающий в XML:

<ComboBox id="comboBoxSelectAll"> 
    <core:Item id="sellectAll" text="Select all" key="All" /> 
    <core:Item id="sellectNotAll" text="Select not all" key="notAll" />       
</ComboBox> 

Вы можете зарегистрировать обработчик события поле со списком в контроллере:

var comboBoxSelectAll = this.getView().byId("comboBoxSelectAll"); 
comboBoxPerc.attachSelectionChange(this.comboBoxSelectAllchanged, this); 

и обрабатывать события в контроллере:

comboBoxSelectAllchanged: function(oEvent){ 
    var key = oEvent.getParameters().selectedItem.getKey(); 

    if (key === "selectAll"){ 
     //save all data 
    } 
    else{ 
     //save just loaded data 
    } 
} 

Надеюсь, это то, что вы ищете, если не хотите спрашивать.

EDITED 10:10 130117:

К сожалению сейчас я вижу, что вы используете Check Box, так и в XML:

<VBox> 
    <CheckBox id="checkBoxAll" text="Select all"/>  
</VBox> 

И в функции, где вы сохраните данные, которые вы используете метод Check Box getSelected :

var oCheckBoxAll = this.getView().byId("checkBoxAll");  
var bIsSelected = oCheckBoxAll.getSelected();  

if(bIsSelected === true){ 
    //save all data 
} 

EDITED 10:14 130117:

Here - рабочий пример в jsbin.

+0

Большое спасибо, но я хотел использовать функцию выбора нескольких элементов в таблице, а не создавать что-то обычай. Кнопка «Выбрать все» добавляется по умолчанию, когда таблица создается в режиме множественного выбора. Я хотел знать, когда была выбрана эта кнопка. –

+0

Хорошо, я вижу, и теперь вы знаете, как это сделать? – Jaro

0

Событие, возбужденное таблицей, имеет параметр listItems. Если длина больше 1, нажмите кнопку «Выбрать все». Чтобы определить, были ли выбраны или отменены все строки, вы можете проверить параметр selected того же события.

onSelectionChanged: function(oEvent) { 
    //this will return true if more than 1 item was selected 
    var bSelectAll = oEvent.getParameter("listItems").length > 1 
    //this will return true if the rows were selected, false if they were deselected 
    var bSelected = oEvent.getParameter("selected"); 
    if (bSelectAll && bSelected) { 
     //make a call to the backend to get all data 
    } 
} 

Вы также можете проверить количество выбранных элементов по сравнению с количеством элементов в таблице. oTable.getItems().length будет указывать, сколько элементов в данный момент находится в таблице. Сравнивая количество элементов в таблице и количество выбранных элементов, вы узнаете, все ли выбраны.

var bAll = oTable.getSelectedItems().length === oTable.getItems().length; 

Для дальнейшей проверки, вы можете использовать функцию $count вашей службы OData, чтобы найти общее количество элементов в интерфейсе, а затем сравнить его с данными таблицы.

var total; 
oModel.read("/EntitySet/$count", { 
    success: function(response) { 
     total = response; 
    } 
} 

В таблице также имеет growingFinished событие, которое вы можете использовать, чтобы определить, все строки были извлечены из внутреннего интерфейса или нет.

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