UNPKG

ember-lifeline

Version:

Ember.js addon for lifecycle aware async tasks and DOM events.

63 lines (49 loc) 1.51 kB
import Mixin from '@ember/object/mixin'; import { registerDisposable, runDisposables } from '../utils/disposable'; /** DisposableMixin provides a mechanism register disposables with automatic disposing when the host object is destroyed. @class DisposableMixin @public */ export default Mixin.create({ /** Adds a new disposable to the Ember object. A disposable is a function that disposes of resources that are outside of Ember's lifecyle. This essentially means you can register a function that you want to run to automatically tear down any resources when the Ember object is destroyed. Example: ```js // app/components/foo-bar.js import Ember from 'ember'; import DisposableMixin from 'ember-lifeline'; import DOMish from 'some-external-library'; const { run } = Ember; export default Component.extend(DisposableMixin, { init() { this.DOMish = new DOMish(); this.bindEvents(); }, bindEvents() { let onFoo = run.bind(this.respondToDomEvent); this.DOMish.on('foo', onFoo); this.domFooDisposable = this.registerDisposable(() => this.DOMish.off('foo', onFoo)); }, respondToDOMEvent() { // do something } }); ``` @method registerDisposable @param { Function } dispose @returns A disposable object @public */ registerDisposable(dispose) { return registerDisposable(this, dispose); }, destroy() { runDisposables(this); this._super(...arguments); }, });