|
public onFiltering=(e)=>{
e.preventDefaultAction=true;
this.setDebounce(e);
}
public setDebounce=debounce((e)=>{
this.onFilter(e);
},500);
onFilter(e){
let query = new Query();
let predicateQuery = query.where(
new Predicate("FirstName", "contains", e.text, true).or(
"LastName",
"contains",
e.text,
true
)
);
query = e.text !== "" ? predicateQuery : query;
e.updateData(this.data, query);
};
|
Good day
May I please request a full example of how to do this with a dropdown in EJ2 Javascript?
Kind regards
Daniel
var searchData = new ej.data.DataManager({ url: 'https://services.odata.org/v4/northwind/northwind.svc/', adaptor: new ej.data.ODataV4Adaptor(), crossDomain: true, }); var dropDownListObj = new ej.dropdowns.DropDownList({ dataSource: searchData, query: new ej.data.Query().from('Employees').select(['FirstName', 'City', 'EmployeeID']).take(6), fields: { text: 'FirstName', value: 'EmployeeID' }, placeholder: 'Select customers', sortOrder: 'Ascending', allowFiltering: true, filtering: debounce((e) => { e.preventDefaultAction = true; if (e.text === '') { e.updateData(searchData); } else { var query = new ej.data.Query().from('Employees').select(['FirstName', 'EmployeeID']); query = e.text !== '' ? query.where('FirstName', 'startswith', e.text, true) : query; e.updateData(searchData, query); } }, 1000), // 1000ms debounce delay }); dropDownListObj.appendTo('#country'); function debounce(callback, delay = 1000) { let timeout; return (...args) => { clearTimeout(timeout); timeout = setTimeout(() => { callback(...args); }, delay); }; } |
debounce function is used to delay the execution of the filtering logic by 1000 milliseconds (1 second). This means that the filtering operation will only be triggered if the user stops typing for 1 second, thus reducing the number of API calls made during rapid typing.Good day
Noted, thank you very much, I will try this out.
Kind regards
Daniel
Hi Daniel
Please get back to us for assistance in the future.
Regards,
Shereen