Показать сообщение отдельно
  #1 (permalink)  
Старый 20.06.2016, 21:59
Новичок на форуме
Отправить личное сообщение для craftenergy Посмотреть профиль Найти все сообщения от craftenergy
 
Регистрация: 20.06.2016
Сообщений: 7

Очень странное поведение JS с библиотекой FancyGrid
Всем привет, в программировании далеко не новичек, в том числе на 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/

Последний раз редактировалось craftenergy, 20.06.2016 в 22:14.
Ответить с цитированием