This addon provides a polyfill for implementing element modifier managers as described in emberjs/rfcs#373.
- Completely inert when running
ember-source
3.8 or higher - Tested against
ember-source
v2.12, v2.16, v2.18, v3.4, v3.5, v3.6, v3.7 in CI
ember install ember-modifier-manager-polyfill
At this point the best documentation is likely still the the RFC itself, but here are a few simple examples (shamelessly stolen from another modifier RFC emberjs/rfcs#353):
// app/modifiers/performance.js
import Ember from 'ember';
export default Ember._setModifierManager(
() => ({
createModifier() {},
installModifier(_instance, _element, args) {
let [type, name] = args.positional;
performance[type](name);
},
updateModifier() {},
destroyModifier() {},
}),
class PerformanceModifier {}
);
// app/modifiers/datepicker.js
import Ember from 'ember';
import $ from 'jquery';
export default Ember._setModifierManager(
() => ({
createModifier() {
return { element: null };
},
installModifier(state, element, args) {
let options = Object.assign({ minDate: 20, maxDate: '+1M +10D' }, args.named);
// setup state bucket for use in destroyModifier
state.element = element;
state.options = options;
$(this.element).datepicker(options);
},
updateModifier() {},
destroyModifier(state) {
$(state.element).datepicker(state.options);
},
}),
class DatepickerModifier {}
);
// app/modifiers/track-impression.js
import Ember from 'ember';
export default Ember._setModifierManager(
owner => ({
createModifier() {
return { element: null, observer: null };
},
installModifier(state, element, args) {
let ga = owner.lookup('service:ga');
let { eventCategory } = args.named;
let interSectionObserver = new IntersectionObserver(entries => {
entries.forEach(entry => ga.send('event', 'impression', eventCategory));
});
// setup state bucket for use in destroyModifier
state.element = element;
state.observer = interSectionObserver;
},
updateModifier() {},
destroyModifier(state) {
state.observer.unobserve(state.element);
},
}),
class TrackImpressionModifier {}
);
This project is licensed under the MIT License.