Я хочу использовать фильтрацию на стороне клиента в jsGrid и реализовал тот же контроллер, что и в скрытом коде на демонстрационной странице (файл db.js), но я работаю с showtopper: фильтром строка не отображается, даже когда я добавил поле управления (которое я не хочу) для его переключения.
Мой код инициализации jsGrid:
function initGrid() {
dom_accountList.jsGrid( {
height: 500,
width: '100%',
autoload: true,
filtering: false,
editing: false,
sorting: true,
paging: true,
pageSize: 25,
pageButtonCount: 5,
fields: accountList.layout,
controller: accountList,
data: accountList.data,
rowClick: function (arg) {//redacted}
});
dom_accountList.jsGrid("option", "filtering", true);
}
Побочные эффекты, которые вы можете искушать исправить:
- «Вам не нужны данные, если у вас есть контроллер» - нет, по
методом проб и ошибок Я обнаружил, что
loadData
не вызывается, пока я не включу статические данные.
- «Но фильтрация установлена в ЛОЖЬ!» - я знаю. Независимо от того, истинно ли это в определении, отсутствует в определении или ложно в определении, а затем переключается после рендеринга (как показано), поля не отображаются на экране.
Теперь я вижу HTML, но он все пустой:
<tr class="jsgrid-filter-row" style="display: table-row;">
<td class="jsgrid-cell" style="width: 10px;"></td>
<td class="jsgrid-cell" style="width: 65px;"></td>
<td class="jsgrid-cell" style="width: 10px;"></td>
<td class="jsgrid-cell" style="width: 10px;"></td>
</tr>
Разве не должно быть input
тегов внутри ТД? Почему они отсутствуют? В этом суть, я думаю.
В случае, если это имеет значение, вот код контроллера, измененный из демо-файла db.js:
function loadData(filter) {
return $.grep(this.data, function (item) {
return (!filter.Account || item.Account.indexOf(filter.Account) > -1)
&& (!filter.AXfer || item.AXfer === filter.AXfer)
&& (!filter.BXfer || item.BXfer === filter.BXfer)
&& (!filter.Name || item.Name.indexOf(filter.Name) > -1)
});
};
function insertItem() {};
function updateItem() {};
function deleteItem() {};
А вот список полей в accountList.layout:
accountList.layout = [
{
name: 'Account',
title: 'Account',
width: '10',
},
{
name: 'Name',
title: 'Name',
width: '65',
},
{
name: 'AXfer',
title: 'ATeam',
width: '10',
},
{
name: 'BXfer',
title: 'BGood',
width: '10',
];
}