2016-01-25 25 views
0

我试图实现一个dropzone,如this React Component。但是,我对如何在事件上应用写入效果感到困惑,例如如何处理事件副作用?

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

由于没有水槽,哪一个不起作用。 map内的代码应该真的在接收器内执行。

有什么建议吗?

回答

1

你应该写一个简单的驱动程序来处理这个问题。请参阅驱动程序文档here

好像你可以做这样的事情:

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说法观察员。

+1

此处还有一个使用preventDefault驱动程序的示例:https://github.com/cyclejs/cycle-examples/blob/master/autocomplete-search/src/main.js#L294 –