Я пытаюсь написать библиотеку, которая может использоваться в Node.js или на стороне клиента.Путаница сервера/клиента модуля Node.js, ошибки EventEmitter
Я бегу в два вопросов:
Я не могу правильно экспортировать. Я использую this doc.
MyClass = exports? and exports or @MyClass = {}
, похоже, не работает, поэтому я сейчас разбил файлы.Библиотека излучает события; Я надеюсь, что кто-то сможет прояснить мое замешательство в том, как сделать это проще. Следуйте со мной ниже :)
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). Там должно быть более простое решение!
Это действительно интересно. Позвольте мне сказать, что пойти и посмотреть, решает ли он мои проблемы :) – 2013-04-17 23:55:17