Datatables mDataProp: val param undefined - PullRequest
0 голосов
/ 23 мая 2018

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

Это устаревшая кодовая база с использованием таблиц данных v1.9.0.

Таблица построена с использованием параметров, таких как aoColumns, aaData.

Для данных таблицы используется массив массивов: т.е.:

aaData = [
   ['12450','<a href='javascript:doStuff(123, 456)>value2</a>', 'User 1', '$500'],
   ['12455','...','...','...'],
   ['12462','...','...','...'],
   ['12314','...','...','...'],
   [...],
   ...
]

Для таблицы необходимо использовать mDataProp для применимых aTargets Сигнатура функции:

tableOptions["aoColumnDefs"] = [
    {
        "mDataProp": function (source, type, val) {
            console.log("source ", val); // This returns: row array
            console.log("type ", type); // This returns each type (except for 'set')
            console.log("val ", val); // This returns: undefined
            var obj = {};
            var temp = angular.element('div');
            temp.innerHTML = val;
            if (type === 'set') {
                obj.value = val;
                obj.value_filter = temp.textContent || temp.innerText;
                console.log(obj.value_filter);
                return;
            } else if (type === 'filter') {
                return val;
            } else if (type === 'sort') {
                return val;
            }
            return obj.value;
        },
        "sDefaultContent": '',
        "aTargets": [ 1 ]
    },
]

Проблема в том, что параметр val внутри mDataProp всегда возвращает undefined, поэтому заполнение данных таблицы будет ошибочным, если не для свойства sDefaultContent.См. эту скрипку .

Почему mDataProp не может заполнить параметр val?mDataProp поддерживает массив массивов в качестве источника данных? (документация не ясна по этому поводу)

1 Ответ

0 голосов
/ 25 мая 2018

Пролистав немного, я обнаружил, что когда mDataProp используется как функция, он не имеет никакой ссылки на данные, передаваемые в таблицу данных из переменной массива javascript, возвращая, таким образом, undefined для * 1003.*.

Обходной путь для этого конкретного случая - использовать прямые ссылки на позиции массива в параметре source, в зависимости от используемого значения aTargets.(При использовании "aTargets": [ 1 ], затем необходимо вызвать source[1] в функции mDataProp).

Я не использовал if (type === "set"){}, потому что не мог получить к нему доступ.

"mDataProp": function(source, type, val) {              
    var obj = {};
    obj.value = source[1];  // Set column value
    // Process value as desired ...
    obj.value_filter = obj.value + ' foobar';
    // Return value for filtering
    if (type === 'filter') {
      return obj.value_filter;
    }
    // Return original value for display, sort, etc.
    return obj.value;
}

Нажмите Обновленная скрипка .

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