альтернативный источник для отфильтрованных и привязанных данных
webix.ui({
view: "combo",
options: {
body: {
dataFeed: "//docs.webix.com/samples/server/countries"
}
}
});
Свойство dataFeed задаёт альтернативный источник данных для:
url:"main/data", // изначально загружает данные
dataFeed: "datafeed/data" // загружает данные впоследствии
Вы можете передать URL строку в свойство dataFeed. В примере ниже строка используется для серверной фильтрации значений Combo.
Фильтруем данные с помощью строки dataFeed
webix.ui({
view: "combo",
options: {
body: {
dataFeed: "//docs.webix.com/samples/server/countries"
}
}
});
В этом случае dataFeed создаёт GET запрос ""url?filter[fieldID]=" + fieldValue", где:
С помощью dataFeed как прокси объекта, вы можете:
Фильтруем данные через dataFeed как прокси
dataFeed:{
$proxy: true, // обязательное поле
load: function(view, params){
// меняем параметр по умолчанию "value" на "title"
params["filter[title]"] = params.filter.value;
delete params.filter;
return (
webix.ajax(
"//docs.webix.com/samples/server/films_sortfilter", params
)
);
}
}
Помните, что из функции load необходимо возвращать промис с данными.
С помощью dataFeed как функции, вы можете
В примере ниже для загрузки данных и их парсинга в список используется метод load.
Фильтруем данные через dataFeed как прокси
dataFeed: function(text) {
// очищаем список от предыдущих значений
this.clearAll();
this.load("//docs.webix.com/samples/server/countries?filter[value]=" + text)
}
Вы можете вручную отправить Ajax запрос и вернуть промис с данными:
dataFeed: function(text) {
return webix.ajax("//docs.webix.com/samples/server/countries?filter[value]=" + text)
.then(data => {
// делаем что-л. с данными
// ...
return data;
});
}
Вы можете использовать свойство dataFeed при привязке компонентов данных и коллекций. Это позволит вам перезагружать данные в привязанный компонент напрямую с сервера, а не с компонента-мастера.
По умолчанию, зависимый компонент получает данные из компонента-мастера. Благодаря свойству dataFeed, зависимый компонент запрашивает данные с другого источника, напр., сервера.
Пример получения удалённых данных через dataFeed
{
view:"datatable",
dataFeed:"remote/data",
// или
dataFeed:function(id, obj){
return webix.ajax("remote/data");
}
// или
dataFeed:{
$proxy:true,
load:function(view, params){
return webix.ajax("remote/data");
}
}
};
Related sample: Datatable: Binding Collections with dataFeed
Когда dataFeed используется как функция для загрузки данных в компонент, она принимает следующие параметры:
Однако при использовании свойства как прокси, его функция load принимает другие параметры:
Если же dataFeed используется, как строка, то создаётся GET запрос ""url?filter[fieldID]=" + fieldValue", где:
В случае форм, вы можете определить dataFeed только как строку или как функцию. Последняя позволяет модифицировать данные перед тем, как запарсить их в компонент в форму.
dataFeed с формой
const form = {
view:"form",
dataFeed:"//docs.webix.com/samples/40_serverside/01_php/server/form.php",
// или
dataFeed: function(id){
webix.ajax("//docs.webix.com/samples/40_serverside/01_php/server/form.php?id="+id)
.then(data => {
data = data.json()[0];
this.setValues(data);
});
}
};
Related sample: Datatable: Binding with Form
dataFeed как строка, создаёт GET запрос наподобие data/form.php?action=get&id=" + fieldValue, где