2015-05-14 12 views
8

Thư viện Mousetrap.js cho phép bạn liên kết một hàm callback để phím như vậy:Kefir.js - Làm cách nào để truyền sự kiện từ chức năng gọi lại?

Mousetrap.bind('space', function, 'keydown');

cách tốt nhất để đính kèm một dòng suối này mà không sử dụng Bus of Doom là gì? Tôi có nên sử dụng emitter hoặc pool không?

Tôi đang cố gắng để có được các phím mũi tên nối trong fiddle này: jsfiddle.net/vzafq25w

Trả lời

8

Bạn có thể sử dụng wrapper chung stream

var leftKeys = Kefir.stream(function(emitter){ 
    Mousetrap.bind('left', function(e) { 
     emitter.emit(e); 
     console.log(e); 
    }); 
    return function(){ 
     // unbind 
    }; 
}); 

http://jsfiddle.net/be9200kh/1/

+1

Đây là cách đúng đắn để làm điều đó. Cũng 'emitter.emit' có thể được truyền trực tiếp như một cuộc gọi lại -' Mousetrap.bind ('left', emitter.emit) ', trừ khi bạn cần log đó. –

2

Thông thường, bạn có thể sử dụng Kefir.fromEvents, nhưng trong trường hợp của bạn, nơi Mousetrap.js không ràng buộc sử dụng on|off phương pháp, bạn có thể thay vì chỉ sử dụng Kefir.pool (Kefir.emitter không còn được dùng nữa) và kích hoạt Kefir trong các cuộc gọi lại của Mousetrap. Tôi đổi mã của bạn để chứng minh sử dụng Kefir.pool trong callbacks bây chuột: http://jsfiddle.net/be9200kh/

Về cơ bản, bạn làm

var pool = Kefir.pool(); 
pool.plug(Kefir.constant(1)); 
pool.map(...).filter(etc) 

Hãy vui vẻ!

Các vấn đề liên quan