IndexedDB-считывание курсора с использованием имени поля

#javascript #indexeddb

Вопрос:

У меня есть много небольших таблиц в базе данных IndexedDB, каждая из которых предназначена для создания выбора на моей HTML-странице. Итак, предположим, что один из них создан с:

         store_dest_fam.createIndex("tdestf_id", "tdestf_id", { unique: true });
        store_dest_fam.createIndex("tdestf_nom", "tdestf_nom", { unique: false });  
 

второй-это:

         store_frota.createIndex("tfrota_id", "tfrota_id", { unique: true });
        store_frota.createIndex("tfrota_nom", "tfrota_nom", { unique: false });
 

Если я создам функцию для каждого, чтобы прочитать значение с помощью «курсора», я создам цикл, в котором у меня есть:

         var tdestf_id = cursor.value.tdestf_id;
        var tdestf_nom = cursor.value.tdestf_nom;
 

и так далее. Все в порядке.

Но так как у меня много небольших таблиц, я хочу создать «глобальную функцию» с такими параметрами, как:

            make_select(name_of_table,name_for_value,name_for_text); 
 

с помощью, например:

   name_of_table = "TAB_START";     // Name of the table to search in
  name_for_value = "tdestf_id";    // Name of the field which value would be use as "value" in the select-option
  name_for_text = "tdestf_text";    // Name of the field which value would be use as "text" in the select-option
 

Я могу открыть соединение с таблицей, используя

     var tx_menu = db_handle.transaction(name_of_table, 'readonly');
    var store_menu = tx_menu.objectStore(name_of_table);
 

что логично, поскольку db_handle.transaction ожидает «строковое имя» таблицы, которое я предоставляю. Но в цикле курсора это не работает (что кажется логичным, поскольку курсору нужен указатель на его структуру, пока я предоставляю строку).

     var data_value = cursor.value.name_for_value;
    var data_text = cursor.value.name_for_text;
 

Итак, вопрос в следующем: как я могу получить значение элемента курсора, указав «строковое имя» поля?

Ответ №1:

Вы спрашиваете, как динамически получить доступ к cursor.value.somethinghere? Если это так, вы можете использовать обозначения в скобках. Предполагая, что вы запросили поля tsestf_id и tdestgf_text и передали их как поле значений и текстовое поле:

 var data_value = cursor.value[valueField];
var data_text = cursor.value[textField];
 

Комментарии:

1. Так просто! Я был убежден, что проверил этот вариант, но, по-видимому, это был не тот случай. Спасибо!