2016-04-05 3 views
1

Я хочу создать очень простой список <ul> с d3 ограниченными данными.d3 шаблон ввода/вывода с массивом объектов

данные в массиве объектов в виде:

[0 => {title: "title one"}, 1=> {title: "title two"}]

Мой код до сих пор:

var titles = _.findWhere(scope.titles, {key: d.key}).values; 
var li = d3.select('.overview-popup ul').selectAll('li') 
    .data(titles); 

li.enter() 
    .append('li') 
    .text(function(n){ return n.title }); 

li.exit().remove(); 

В результате это не так, я бы предсказать, где Элементы li получают cleaned каждый раз, когда к нему подается новый массив данных. Он оставит некоторые узлы и обновит их в зависимости от количества узлов. Это из-за индекса?

fiddle here

+0

Итак, из моего понимания, d3 соединяет новые данные с существующим массивом данных. Я все еще не уверен, как эта функция исправляет это. Я столкнулся с той же проблемой. Когда я использую ключевую функцию, на моем графике ничего не отображается, поэтому мне нужно лучше понять ключевую функцию, которую я предполагаю. Я использую такой массив: '[{date: 'some date ...', percent: '2.89'}]' даты согласованы между новыми массивами с определенным диапазоном и процентами неизвестны. Я бы очень хотел использовать индекс по умолчанию, потому что объекты в порядке, но когда я делаю это и вытаскиваю новые данные, точки графа не обновляют – nf071590

ответ

3

Может быть, это поможет:

Для достижения константности объекта с D3.js указать ключевую функцию в качестве второго аргумента selection.data

(от Object Constancy - Key Functions)

В вашем случае это будет:

var li = d3.select('.overview-popup ul') 
      .selectAll('li') 
      .data(titles, function(e) { return e.title }); 
Смежные вопросы