0

我正在尝试实现一个 dropzone,例如这个 React Component。但是,我对如何对事件应用写效果有点坚持,例如

dragOver$: DOM
  .select('#dropzone')
  .events('ondragover')
  .map(e => {
    e.preventDefault()
    e.dataTransfer.dropEffect = 'copy'
  })

由于没有水槽,这将不起作用。里面的代码map真的应该在水槽内执行。

有什么建议么?

4

1 回答 1

1

您应该编写一个简单的驱动程序来处理这个问题。在此处查看有关驱动程序的文档。

看起来你可以做这样的事情:

function main(sources) {
  return {
    dragOver: DOM.select('#dropzone').events('ondragover')
  };
}

const drivers = {
  DOM: makeDOMDriver('#app'),
  dragOver: (e$ => e$.subscribe(e => {
    e.preventDefault()
    e.dataTransfer.dropEffect = 'copy'
  }))
}

简而言之:驱动程序封装了所有副作用并从这些接口返回输入,并且 Rx 代码中的所有副作用都被限制在subscribe参数 Observers 中。

于 2016-01-26T03:00:38.453 回答