this.on('change', callback);
и
this.removeListener('change', callback);
не работают на моих addChangeListener
и removeChangeListener
. Я импортировал EventEmitter
и использовал его с object-assign ("object-assign": "^4.1.1"
).
Но выдает ошибку:
bundle.js: 41229 Uncaught TypeError: this.on не является функцией
at Object.addChangeListener (bundle.js: 41229)
по адресу Authors.componentWillMount (bundle.js: 40504)
at callComponentWillMount (bundle.js: 26260)
at mountClassInstance (bundle.js: 26356)
at updateClassComponent (bundle.js: 27725)
at beginWork (bundle.js: 28366)
at executeUnitOfWork (bundle.js: 31198)
в workLoop (bundle.js: 31227)
at HTMLUnknownElement.callCallback (bundle.js: 19504)
at Object.invokeGuardedCallbackDev (bundle.js: 19542)
Вот мой код:
"use strict";
import AppDispatcher from '../dispatcher/AppDispatcher';
import ActionTypes from '../constants/actionTypes';
import { EventEmitter } from 'events';
import assign from 'object-assign';
import _ from 'lodash';
var CHANGE_EVENT = 'change';
var _author = [];
var AuthorStore = assign({}, EventEmitter.protoType, {
addChangeListener(callback) {
this.on(CHANGE_EVENT, callback);
},
removeChangeListener(callback) {
this.removeListener(CHANGE_EVENT, callback);
},
emitChange() {
this.emit;
},
getAllAuthors() {
return _author;
},
getAuthorById(id) {
return _.find(_author, {
id: id
});
}
});
AppDispatcher.register(function(action) {
switch (action.actionType) {
case ActionTypes.INITIALIZE:
_author = action.initialData.authors;
AuthorStore.emitChange();
break;
case ActionTypes.UPDATE_AUTHOR:
var existingAuthor = _.find(_author, {
id: action.author.id
});
var existingAuthorIndex = _.indexOf(_author, existingAuthor);
_author.splice(existingAuthorIndex, 1, action.author);
AuthorStore.emitChange();
break;
case ActionTypes.CREATE_AUTHOR:
_author.push(action.author);
AuthorStore.emitChange();
break;
case ActionTypes.DELETE_AUTHOR:
_.remove(_author, function(author) {
return action.id === author.id;
});
AuthorStore.emitChange();
break;
default:
}
});
export default AuthorStore;
Я не могу понять, почему это не работает, я ссылаюсь на эту документацию .
Спасибо.