2015-01-30 23 views
6

Moja markup:RxJS: Jak mogę event.preventDefault() upuścić zdarzenie?

<section id="drop-target"> 
    Drop file here... 
</section> 

Mój kod:

var dropTarget = document.getElementById('drop-target'); 

Rx.Observable.fromEvent(dropTarget, 'dragover').subscribe(function(event) { 
    event.preventDefault(); 
}); 

var dropStream = Rx.Observable.fromEvent(dropTarget, 'drop'); 

dropStream.subscribe(function(event) { 
    console.log('This will be called.'); 
    event.preventDefault(); 
}); 

dropStream.map(function(event) { 
    console.log('This will not be called.'); 
    return event.dataTransfer.files[0].path; 
}); 

pomysłów jak mój ostatni map zwrotna można nazwać? Potrzebuję zarówno preventDefault s dla drop i dragover, aby uniemożliwić przeglądarce otwarcie pliku.

Odpowiedz

6

Po prostu zasubskrybuj swój strumień map. Wszystko, co robi map, tworzy nowy obserwowalny, który uruchomi operację map w strumieniu. Ale nadal musisz zasubskrybować, aby coś zrobił:

dropStream 
    .map(function (event) { 
     console.log("hello"); 
     return event.dataTransfer.files[0].path; 
    }) 
    .subscribe(function (path) { 
     console.log("path=" + path); 
    }); 
+0

Masz rację, dziękuję! – Pipo