2016-01-25 63 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 –