Angular -Slickgrid: не все фильтры появляются в заголовке - PullRequest
0 голосов
/ 03 февраля 2020

ДЛЯ ДОКУМЕНТАЦИИ: Я нашел проблему и решение:

Мы используем цифры c id в нашем наборе данных (например, 1,2,3, ...). Где-то в коде сетка запутывается и отображает неправильные столбцы с идентификаторами: Когда я спрашиваю div с grid.getHeaderRowColumn (col.id) и заполняю его col.id, он показывает другой идентификатор, чем col.id! Нечего и говорить, что в то же время не все колонны найдены (поэтому не все фильтры можно было установить с моей первоначальной проблемой). Замена идентификатора на строку («id1», «id2», «id3», ...) решила проблему!

Я не знаю, является ли это ошибкой или просто невозможностью для динамических c столбцов, но использование только строк в качестве идентификаторов пока что помогает. Спасибо @ghiscoding за помощь.

ОРИГИНАЛЬНЫЙ ВОПРОС:

У меня странная проблема:

Когда я строю свою скользящую сетку, не все столбцы имеют фильтр-поле ввода в строке заголовка (хотя они должны иметь, относительно моих определений столбцов).

Когда я добавляю (удаляю) столбцы, другие / или другие фильтры появляются / исчезают без изменения других определений столбцов. Таким образом, это кажется случайным образом (хотя при использовании тех же столбцов одни и те же фильтры появляются / исчезают).

Используя обычную скользящую сетку, я могу установить эти фильтры вручную, чтобы исправить эту проблему. Но как я могу сделать это с angular -slickgrid?

Любые предложения?

Я использую angular -slickgrid версии 2.15.4.

EDIT

это мои gridOptions и ColumnDefinitions. (они создаются динамически, но это из инструментов разработчика непосредственно перед инициализацией сетки)

columnDefinitions: {
    0: {id: 6, …}
    1: {id: 2, …}
    2: {
        id: 4
        fieldtype: "string"
        name: "deliveryaddressadditionalline"
        json_translate_property: null
        field: "deliveryaddressadditionalline"
        detailparams: {edit: true, tab: {…}, card: {…}}
        gridparams: {show: true, edit: false}
        filterable: true
        sortable: true
        type: 1
        editor: {model: ƒ}
        filter: {model: ƒ}
        grouping: {getter: "deliveryaddressadditionalline", collapsed: false, formatter: ƒ}
        rerenderOnResize: true
        }
    3: {
        id: "edit"
        name: ""
        field: ""
        width: 30
        formatter: ƒ (row, cell, value, columnDef, dataContext)
        onCellClick: (e, args) => { this.gotoDetailPane(e, args, detailInfo); }
        gridparams: {show: true}
        fieldtype: "edit"
        }
    4: {id: 1, fieldtype: "string", name: "id", json_translate_property: null, field: "id", …}
}

gridOptions: {
    enableColumnPicker: false
    headerMenu: {hideColumnHideCommand: true}
    enableGridMenu: false
    enableAutoResize: true
    autoResize: {containerId: "grid-container", sidePadding: 15}
    enableSorting: undefined
    autoEdit: false
    editable: true
    enableCellNavigation: true
    enableFiltering: true
    rowSelectionOptions: {selectActiveRow: true}
    enableRowSelection: true
    showHeaderRow: true
    showTopPanel: false
    enableDraggableGrouping: true
    createPreHeaderPanel: true
    showPreHeaderPanel: false
    preHeaderPanelHeight: 40
    draggableGrouping: {
        dropPlaceHolderText: "Drop a column header here to group by the column", 
        deleteIconCssClass: "fa fa-times", 
        onGroupChanged: ƒ, 
        onExtensionRegistered: ƒ
    }
    explicitInitialization: true
}

и это результат (несколько ситуаций: столбцы перетасовываются, фильтры появляются случайным образом, в то время как код тот же ):

enter image description here

enter image description here

enter image description here

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Обратите внимание, что первые две строки getHeaderRowColumn являются

function getHeaderRowColumn(columnIdOrIdx) {
  var idx = (typeof columnIdOrIdx === "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx));

, поэтому, если переданный параметр является числом, он интерпретируется как индекс на основе 0 массива столбцов ( не идентификатор). Если параметр является строкой, то ищется индекс массива столбцов, который рассматривается как идентификатор.

Таким образом, ваше решение верное; если идентификатор - цифра c, просто перед тем, как передать его, просто преобразуйте его в строку.

Обратите внимание, что в большинстве случаев это * верно для javascript объектов: o[2] будет пытаться найти второй элемент массива, тогда как o['2'] будет искать свойство объекта с именем '2 ». Приведенный выше код не зависит от объекта, но поведение такое же.

0 голосов
/ 04 февраля 2020

Я нашел проблему и решение:

Мы используем цифры c идентификаторы в нашем наборе данных (например, 1,2,3, ...). Где-то в коде сетка запутывается и отображает неправильные столбцы с идентификаторами: Когда я спрашиваю div с grid.getHeaderRowColumn (col.id) и заполняю его col.id, он показывает другой идентификатор, чем col.id! Нечего и говорить, что в то же время не все колонны найдены (поэтому не все фильтры можно было установить с моей первоначальной проблемой). Изменение идентификатора на строку ('id1', 'id2', 'id3', ...) решило проблему!

Я не знаю, является ли это ошибкой или просто невозможностью с Dynami c столбцы, но использование только строк в качестве идентификаторов делает свое дело на данный момент. Спасибо @ghiscoding за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...