Learn how to build better Ember components in six lessons that walk through the fundamentals of UI development.
Sign up for our free email course today:
Ask yourself:
If so, I have some news for you:
It doesn’t have to be like this!
There are solid Ember patterns that address each one of these symptoms. Sound too good to be true?
Just imagine
When you take this email course, you’re going to learn 6 patterns that solve all of these problems and more.
Sure, understanding all the ins and outs of component design is tough, and only truly happens with time. But we’ve taken our combined 10 years of Ember experience and distilled these principles down into a series of lessons that anyone can understand.
Here’s the thing: writing components should be fun! We honestly believe that. If you’re not showing off your work to someone with a smile on your face, there’s probably still a pattern or two you could benefit from learning.
Even though we’ve been doing this for a while, we still have nearly the same conversation every week:
heya, I finished that feature
nice, how'd it go?
dude, that renderless component you wrote last week worked perfectly...
I just had to wire up a new consumer. I didn't even write any new JS. Almost felt like cheating!
👍 so awesome man
I freaking love components!
I swear, it’s like Groundhog Day. The power and flexibility of these patterns is like the gift that just keeps on giving.
Once you have these techniques under your belt, you’ll feel excited and empowered the next time you go to break up a new UI into Ember components.
You won’t feel helpless, and give in to writing messy code.
You won’t add hard-to-reproduce bugs, and ship unpolished UIs.
And you might even impress your colleagues along the way.
<button {{action (increment count)}}> {{count}} clicks </button>
Learn how this modern rendering technique eliminates messy code and pesky bugs.
<InViewport @fire={{action 'track'}}> <h2>Sign up today!</h2> </InViewport>
Use your new knowledge of declarative rendering to tame the imperative parts of your code.
<CarouselViewer @index={{currentIndex}} @onChange={{action (mut currentIndex)}}/> <CarouselStatus @index={{currentIndex}} />
Learn about this fundamental technique for keeping data in sync across multiple components.
<TweetCard @tweet={{tweet}} />
See how your application’s domain should influence component responsibility and encapsulation.
<AccessFor @model={{video}} as |hasAccess|> {{#if hasAccess}} <video src={{video.url}}> {{else}} <p>Sign up today!</p> {{/if}} </AccessFor>
Unlock the full capabilities of components by exploring use cases that don’t involve rendering HTML.
<input oninput={{perform search}}> {{#if search.isRunning}} <p>Loading results...</p> {{else}} {{#each search.last.value as |result|}} <p>{{result}}</p> {{/each}} {{/if}}
Ember Concurrency tasks are state machines. Use them to simplify loading data outside of the router.
👋 Hey there! @ryantoronto and @samselikoff here, creators of EmberMap, authors of Ember CLI Mirage, and hosts of the EmberMap Podcast.
We love teaching Ember through our videos and blog posts , by speaking at conferences, and by running trainings.
Sign up for the course today: