diff --git a/src/common/module.js b/src/common/module.js index 48650a5f6..5ba2c43e0 100644 --- a/src/common/module.js +++ b/src/common/module.js @@ -18,6 +18,19 @@ export default { }, {}); }, + __initListen() { + const { all, em, events } = this; + all && + em && + all + .on('add', (m, c, o) => em.trigger(events.add, m, o)) + .on('remove', (m, c, o) => em.trigger(events.remove, m, o)) + .on('change', (p, c) => + em.trigger(events.update, p, p.changedAttributes(), c) + ) + .on('all', this.__catchAllEvent, this); + }, + __remove(model, opts = {}) { const { em } = this; const md = isString(model) ? this.get(model) : model; diff --git a/src/device_manager/index.js b/src/device_manager/index.js index d22d2ed93..c5ef00339 100644 --- a/src/device_manager/index.js +++ b/src/device_manager/index.js @@ -74,15 +74,12 @@ export default () => { init(config = {}) { c = { ...defaults, ...config }; const { em } = c; - this.em = em; devices = new Devices(); (c.devices || []).forEach(dv => this.add(dv.id || dv.name, dv.width, dv)); + this.em = em; this.all = devices; - devices - .on('add', (m, c, o) => em.trigger(evAdd, m, o)) - .on('remove', (m, c, o) => em.trigger(evRemove, m, o)) - .on('all', this.__catchAllEvent, this); + this.__initListen(); return this; }, diff --git a/test/specs/device_manager/index.js b/test/specs/device_manager/index.js index cd942d087..a512b961e 100644 --- a/test/specs/device_manager/index.js +++ b/test/specs/device_manager/index.js @@ -121,6 +121,17 @@ describe('DeviceManager', () => { expect(eventFnAll).toBeCalled(); }); + test('Update device', () => { + const event = jest.fn(); + em.on(obj.events.update, event); + const model = obj.add({}); + const up = { name: 'Test' }; + const opts = { myopts: 1 }; + model.set(up, opts); + expect(event).toBeCalledTimes(1); + expect(event).toBeCalledWith(model, up, opts); + }); + test('Render devices', () => { expect(obj.render()).toBeTruthy(); });