2017-01-12 6 views
1

В JavaScript у меня есть код, как показано ниже, чтобы остановить распространение события, когда что-то перетаскивается.Как остановить распространение события в d3 с помощью TypeScript?

var drag = d3.behavior.drag() 
    .origin(function(d) { 
    return d; 
    }) 
    .on('dragstart', function(e) { 
    d3.event.sourceEvent.stopPropagation(); 
    }) 
    .on('drag', function(e) { ... }); 

В машинопись, я заметил, что d3.event.sourceEvent не существует. Ниже приведен соответствующий код TypeScript.

let drag = d3.behavior.drag() 
    .origin((d, i) => { 
    let data = d as any; 
    return { x: data.x as number, y: data.y as number }; 
    }) 
    .on('dragstart', (d, i) => { 
    //what to do here 
    }) 
    .on('drag', (d, i) => { ... }); 

В самом деле, on метода подпись изменилась в машинописи. Файл декларации выглядит следующим образом.

export module behavior { 
interface Drag<Datum> { 
    on(type: string): (d: Datum, i: number) => any; 
    on(type: string, listener: (d: Datum, i: number) => any): Drag<Datum>; 
} 
} 

Ниже приведены зависимости от npm, связанные с d3.

  • "@ типы/d3": "3.5.37"
  • "d3": "^ 3.5.16"

Любые идеи о том, как сделать то же самое в машинописном?

+1

Я думаю, что это должно быть 'd3.event.stopPropagation()' –

ответ

1

Оказывается, мне нужно было сделать отливку.

let event = d3.event as d3.BaseEvent; 
event.sourceEvent.stopPropagation(); 
+0

Я имел такую ​​же проблему, используя Scala.js и ответ помог мне найти решение: d3.event.asInstanceOf [MouseEvent] .stopPropagation() –

Смежные вопросы