ember-destroyable-polyfill
Polyfill for RFC 580 "Destroyables".
Installation
ember install ember-destroyable-polyfill
For addons, pass the -S
flag.
Compatibility
- Ember.js v3.4 or above
ember-cli-babel
v7.22.1 or above- Ember CLI v2.13 or above
- Node.js v10 or above
Summary
Adds an API for registering destroyables and destructors with Ember's built in
destruction hierarchy.
import { registerDestructor } from '@ember/destroyable';
class MyComponent extends Component {
constructor() {
let timeoutId = setTimeout(() => console.log('hello'), 1000);
registerDestructor(this, () => clearTimeout(timeoutId));
}
}
The API will also enable users to create and manage their own destroyables, and
associate them with a parent destroyable.
import {
associateDestroyableChild,
registerDestructor
} from '@ember/destroyable';
class TimeoutManager {
constructor(parent, fn, timeout = 1000) {
let timeoutId = setTimeout(fn, timeout);
associateDestroyableChild(parent, this);
registerDestructor(this, () => clearTimeout(timeoutId));
}
}
class MyComponent extends Component {
manager = new TimeoutManager(this, () => console.log('hello'));
}
For detailed usage instructions, refer to the
RFC 580 "Destroyables".
TypeScript Usage
TypeScript's normal type resolution for an import from @ember/destroyable
will not find this the types provided by this package (since TypeScript
would attempt to resolve it as node_modules/@ember/destroyable
or under
the Definitely Typed location for @ember/destroyable
). Once the
@ember/destroyable
API is a documented part of Ember's API, the
Definitely Typed folks will gladly accept adding that API, but in the
meantime users will need to modify their tsconfig.json
to tell TypeScript
where these types are.
Add the following to your tsconfig.json
:
{
"paths": {
"@ember/destroyable": ["node_modules/ember-destroyable-polyfill"],
}
}