Всем привет, в программировании далеко не новичек, в том числе на js, но данная ситуация ввела в ступор, понять не могу по какой причине не работает то что я хочу сделать...
Вообщем в чем суть:
Разбираюсь с библиотекой FancyGrid, необходимо получить с сервера поля: Наименование товара, Количество, Цена
Поле Количество должно содержать раскрывающийся список со значениями: от 1 до <количества товара>...
В библиотеке есть тип поля "combo", при его использовании ячейка превращается в раскрывающийся список, все работает, но при статическом задании данных.
Например:
columns: [
{
index: 'stock',
title: 'Количество',
type: 'combo',
data: ['1', '2', '3']
}
<...>
Но при попытке использовать тип "combo" с динамическими данными ничего работать не хочет... в ячейке тупо выводится входной массив строкой...
Например для количества 5 (с сервера передается массив [1,2,3,4,5]):
1,3,3,4,5
Хотя поидее должен быть раскрывающийся список...
Для того чтобы заработало надо каким-то чудесным образом заполнить массив data, что при динамической погрузке данных не получается... пробовал так:
columns: [
{
index: 'stock',
title: 'Количество',
type: 'combo',
data: stock
}
<...>
но ничего не работает, "stock" не является переменной, в документации по этому поводу ни слова, а в примерах использования библиотека с ajax толи специально не используют другие типы кроме string... одни примеры со string ячейками...
Ладно, плюнул на это, нашел в документации функцию в конфигурации ячейки "render()", с помощью ее можно как угодно изменить входные данные и вернуть измененные обратно в ячейку... например можно задать формат ячейке:
render: function(o){
o.value = o.value + ' руб.';
return o;
}
Посмотрел структуру объекта который можно изменить функцией render()... нашел где должны быть данные массива "data". Присваиваю его вручную:
o.column.data = new Array()
o.column.data[0]=1
o.column.data[1]=2
o.column.data[2]=3
o.column.data[3]=4
Все замечательно работает! Далее пробую сделать динамическую генерацию этого массива, на входе у меня есть максимальное значение количества, это переменная - o.value.
Делаю так:
o.column.data = new Array()
for (var i=1;i<o.value;i++){
o.column.data[i] = i
}
Но не тут то было! Ничего правильно работать не хочет, создается только 1 элемент массива!
[0]=1
И всё!
Тут же делаю например так:
o.column.data = new Array()
for (var i=1;i<9;i++){
o.column.data[i] = i
}
И о чудо, работает:
[0]=1
[1]=2
[2]=3
[3]=4
[4]=5
[5]=6
[6]=7
[7]=8
[8]=9
В этом собственно и вопрос, что это черт возьми за мистика! Сначала думал что o.value не является числовым... всяческие преобразования (Number(o.value), o.value*1 и тп) результату не дают, тоже самое, в массив заносится только 1 элемент!
Надеюсь понятно объяснил... может быть я изобретаю велосипед и есть другой способ динамически создать combo ячейку....
ссылка на документацию:
fancygrid.com/docs/