Я заполняю набор полей ввода текста, отображающих значения ассоциативного массива с использованием d3js. Пользователь меняет некоторые входные значения.d3js принимает/возвращает значения ввода
var obj = {a: 'Hello', b: 'World'}
var kk = function(d){return d.key}
var kv = function(d){return d.value}
var upd = function(c){
c.select('div.label').text(kk)
c.select('div.input input').attr("value", kv)
}
var data = d3.entries(obj)
var prop = d3.select("div.container").selectAll("div.prop").data(data, kk)
upd(prop)
var eprop = prop.enter().append("div").attr("class", "prop")
eprop.append("div").attr("class", "label")
eprop.append("div").attr("class", "input").append("input").attr("name", kk)
upd(eprop)
prop.exit().remove()
Каковы лучшие практики в
а) обновить исходный ассоциативный массив из DOM (противоположное направление)
б) возвращаются значение DOM к оригинальному
Моих текущие решений являются
a) итерация по входным полям d3.select("div.container").selectAll("div.prop").select('div.input input').each(function(){obj[this.name]=this.value})
b) назначение []
в качестве данных выбора, а затем возврат исходных данных (я не нашел ничего подобного обновлению или обновлению силы)
Edit (обобщенно)
поля ввода, отображающее значения ассоциативного массива является лишь частным случаем, вы можете себе представить, какие d3js макет применяются на модели с взаимодействием с пользователем.
Но в целом:
а) принимают значения из DOM обратно к исходным данным
б) вернуться к DOM с фактическими данными
источника Есть ли d3js встроенной поддержки или d3js плагин для этого?
Просто из любопытства, что такое 'obj' for? –
@CoolBlue это ассоциативный массив, см. Codenippet в вопросе. но если у вас нормальный массив, вы можете пропустить присвоение 'obj [d.key] =' и скобки –