ember-computed-template-string
ember-computed-template-string copied to clipboard
Consider using RegExp and CPM instead of a Babel transform
I recently watched (and enjoyed!) @serenaf's talk about this addon at EmberCamp London 2016.
I had an idea for how this might be doable without having to resort to a Babel transform (which I had a few concerns about) while still maintaining the same interface. I gave it a shot and was able to get this to work using a computed property macro and a RegExp.
The idea behind my approach relies on three observations:
- We can use a regular expression to find all the properties/paths in the template string
- The
String.prototype.replacefunction supports having a function passed as a second parameter which lets you dynamically replace a match based on the contents of the match - Computed property macros can be generated with dynamic keys based on the passed value
The approach is then to create a computed property macro which:
- Constructs and uses a regular expression to get all properties/paths in the passed template string, then
- Uses those properties (after a
uniqto avoid duplication) as the dependent keys of the generated computed property, and finally - Uses
String.prototype.replaceto replace instances of${property}with theget()lookup of those properties.
You can see my solution in a twiddle (source). For the tests I copied the tests in this project's tests/unit/custom-replace-call-paths-test.js, and they seem to all pass.
Due to #17, I'm unable to use ember-computed-template-string, so I used @SaladFork's solution as a local module. It works fine. :+1: