2013-04-17 4 views
0

Я пытаюсь написать библиотеку, которая может использоваться в Node.js или на стороне клиента.Путаница сервера/клиента модуля Node.js, ошибки EventEmitter

Я бегу в два вопросов:

  1. Я не могу правильно экспортировать. Я использую this doc. MyClass = exports? and exports or @MyClass = {}, похоже, не работает, поэтому я сейчас разбил файлы.

  2. Библиотека излучает события; Я надеюсь, что кто-то сможет прояснить мое замешательство в том, как сделать это проще. Следуйте со мной ниже :)

Node.js:

Библиотека:

{EventEmitter} = require 'events' 

    class MyClass extends EventEmitter 

     emitSomething: (key, data) -> 

     @emit key, data 

module.exports = MyClass 

Требуется:

MyClass = require 'myclass' 
myClass = new MyClass() 

myClass.on 'someevent', (data) -> 
    console.log data 

# Bare with not using `emit` directly. 
data = 
    key: 'value' 

myClass.emitSomething 'someevent', data 

Клиентская сторона

EventEmitter прилагается.

class MyClass extends EventEmitter 

    emitSomething: (key, data) -> 

    @trigger key, [ data ] # That's stupid. 

Файл библиотеки включен в сценарий и где я:

myClass = new MyClass() 

myClass.on 'someevent', (data) -> 
    console.log data 

data = 
    key: 'value' 

myClass.emitSomething 'someevent', data 

Клиентский

Backbone.js/Underscore.js включены (не библиотеки EventEmitter выше).

class MyClass 

    constructor:() -> 

    _.extend @, Backbone.Events 

    emitSomething: (key, data) -> 

    @trigger key, data # Notice the difference. 

Файл библиотеки включен в сценарии и где я:

myClass = new MyClass() 

myClass.on 'someevent', (data) -> 
    console.log data 

data = 
    key: 'value' 

myClass.emitSomething 'someevent', data 

Так, ну, что это лучший способ, чтобы написать библиотеку, испускающие события как для узла и в браузере? Библиотека EventEmitter, похоже, конфликтует с Backbone, когда я их включил (она должна работать на узле, с или без Backbone). Там должно быть более простое решение!

ответ

2

Вам следует рассмотреть возможность использования браузера, который позволит вам просто использовать клиентскую часть модуля MyClass, поскольку он включает в себя версию событий nodecore.

Так на стороне клиента:

MyClass = require('./myclass') 
myClass = new MyClass() 

http://browserify.org/

https://github.com/substack/coffeeify

+0

Это действительно интересно. Позвольте мне сказать, что пойти и посмотреть, решает ли он мои проблемы :) – 2013-04-17 23:55:17

Смежные вопросы