У меня есть код ниже, в котором есть список диапазонов, которые будут созданы на основе ввода
<div id="tags" style="border:none">
<span class="tag" id="4"></span>
<input type="text" id="inptags" value="" placeholder="Add max of 6 values (enter,)" />
</div>
Например, теги span::
Movies, Housing, Bank, Holiday, Restaurant, Travel
Для каждого из вышеуказанных имен мои пользователи давали некоторое число (в пределах 1-20)
Я пытаюсь связать эти имена с моим входным именем радарной диаграммы d3.
Ладарная диаграмма:
Пустая радиолокационная диаграмма заполнена нижеприведенным объектом
dataset_v = {
d0: { id: 0, name: '', value: 3 },
d1: { id: 1, name: '', value: 3 },
d2: { id: 2, name: '', value: 3 },
d3: { id: 3, name: '', value: 3 },
d4: { id: 4, name: '', value: 3 },
d5: { id: 5, name: '', value: 3 }
};
Код для рисования диаграммы:
<radial-plot dsn="dataset_v">
Это поле имени переменной dataset_v должно быть привязано к входным значениям диапазона.
Допустим, если я ввожу только один входной диапазон -> моя диаграмма должна отображаться только с одним именем поля, и значение может быть любым по умолчанию, пока пользователь не изменит его. Если я ввожу два входных значения диапазона -> диаграмма должна отображать эти два имени поля и с значения по умолчанию ....
Эти значения по умолчанию в лепестковой диаграмме позже могут быть скорректированы пользователями в соответствии с их требованиями.
Как я могу связать значения моего входного диапазона с именами моей переменной dataset_v?
Я уже проделал некоторую работу и добился определенного прогресса, но не убежден.
Вручную я создал с помощью javascript приведенный ниже метод, который работает, но, как вы видите, он неэффективен, так как вручную я должен поставить условие для каждого тега. Пример: когда тегов 3 -> установить dataset_v для 3 элементов, когда снова установлено 4, когда снова установлено 5,... :
$(function () {
$('#tags input').on('focusout', function () {
var txt = this.value.replace(/[^a-zA-Z0-9\+\-\.\#]/g, '');
if (txt) {
$(this).before('<span class="tag">' + txt.toLowerCase() + '</span>');
}
this.value = "";
}).on('keyup', function (e) {
// if: comma,enter (delimit more keyCodes with | pipe)
if (/(188|13)/.test(e.which)) $(this).focusout();
if ($('#tags span').length == 3) {
var div = document.getElementById("tags");
var spans = div.getElementsByTagName("span");
dataset_v = {
d0: { id: 0, name: '', value: 3 },
d1: { id: 1, name: '', value: 3 },
d2: { id: 2, name: '', value: 3 }
};
}
if ($('#tags span').length == 4) {
var div = document.getElementById("tags");
var spans = div.getElementsByTagName("span");
dataset_v = {
d0: { id: 0, name: '', value: 3 },
d1: { id: 1, name: '', value: 3 },
d2: { id: 2, name: '', value: 3 },
d2: { id: 3, name: '', value: 3 }
};
}
if ($('#tags span').length == 8) {
document.getElementById('inptags').style.display = 'none';
}
});
$('#tags').on('click', '.tag', function () {
$(this).remove();
document.getElementById('inptags').style.display = 'block';
});
});
Есть ли способ динамически связать мои входные значения диапазона с именами моей переменной радарной диаграммы d3 - с помощью обычного jquery или Angular JS/Javascript?
Скриншоты
Входные диапазоны:
Для приведенной ниже переменной dataset_v
dataset_v = {
d0: { id: 0, name: 'Housing', value: 12 },
d1: { id: 1, name: 'Movies', value: 5 },
d2: { id: 2, name: 'Bank', value: 8 },
d3: { id: 3, name: 'Holiday', value: 8 },
d4: { id: 4, name: 'Restaurant', value: 6 },
d5: { id: 5, name: 'Travel', value: 4 }
};
Диаграмма радара выглядит так: