Polyfill for RFC 580 "Destroyables".
ember install ember-destroyable-polyfill
For addons, pass the -S
flag.
- Ember.js v3.4 or above; completely inert for v3.22.0-alpha.1 and above
ember-cli-babel
v7.22.1 or above- Ember CLI v2.13 or above
- Node.js v10 or above
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'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
:
{
// ...snip...
"paths": {
// ...snip...
"@ember/destroyable": ["node_modules/ember-destroyable-polyfill"],
}
}