Я работаю над небольшой графической библиотекой, используя код d3, который я написал. Я добавлял параметры конфигурации/настройки в свои диаграммы для различных случаев использования, и что-то, что я продолжаю работать, это конфликтующие обработчики событий.Как я могу зарегистрировать события в d3?
Переходы иногда дают мне проблемы, но мой вопрос более общий, чем это. Каков хороший способ выполнить набор обработчиков событий в моих диаграммах?
Один метода я использовал, чтобы создать буквальный массив обработчиков, затем перебрать список, выполнение каждого обработчика:
function chart(selection) {
selection.each(function(data) {
// initial config and options, including the handlers array
var margin = {top: 20, right: 20, bottom: 50, left: 40},
...
fadeOnHover = true,
barMouseoutHandlers = [],
barMouseoverHandlers = [];
// create the chart
// an option
if (fadeOnHover) {
barMousemoveHandlers.push(function(d, i) {
selection.selectAll('.bar').filter(function(d, j){return i!=j;})
.transition().duration(100).style('opacity', '.5');
selection.selectAll('.bar').filter(function(d, j){return i==j;})
.transition().duration(100).style('opacity', '1');
});
barMouseoutHandlers.push(function() {
selection.selectAll('.bar').transition().duration(100).style('opacity', '1');
});
}
// other options, which may add handlers
// then at the end of the function, execute all handlers
g.selectAll('.bar')
.on('mouseover', function(d, i) {
barMouseoverHandlers.forEach(function(handler) { handler(d, i); });
})
.on('mouseout', function(d, i) {
barMouseoutHandlers.forEach(function(handler) { handler(d, i); });
});
});
}
Это то, что я придумал, когда просто бросал некоторые функции на моих графиках в гуще вещей, но он явно не очень модульный или хорошо организованный. Возможно, есть возможность извлечь часть этих предметов в отдельные объекты.
Какие еще существуют подходы? Я хотел бы услышать ваши мысли об этом.
Вы видели [очередь] (https://github.com/mbostock/queue)? –
Спасибо, я обязательно посмотрю. Мой вопрос также относится к задачам синхронизации. В основном, я пытаюсь выяснить, как лучше всего подключать/удалять несколько прослушивателей событий. –
Сообщите нам больше о том, что вы подразумеваете под «конфликтующими обработчиками событий» – explunit