1<!DOCTYPE html> 2<html lang="en"> 3 <head> 4 <meta charset="utf-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="description" content=""> 7 <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes"> 8 9 10<meta name="deprecation-app/config/environment" content="%7B%22modulePrefix%22%3A%22deprecation-app%22%2C%22environment%22%3A%22production%22%2C%22apiHost%22%3A%22%22%2C%22rootURL%22%3A%22%2F%22%2C%22locationType%22%3A%22history%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_DEFAULT_ASYNC_OBSERVERS%22%3Atrue%2C%22_JQUERY_INTEGRATION%22%3Afalse%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22name%22%3A%22deprecation-app%22%2C%22version%22%3A%221.0.0%2B40f13666%22%7D%2C%22fastboot%22%3A%7B%22hostWhitelist%22%3A%5B%7B%7D%5D%7D%2C%22algolia%22%3A%7B%22algoliaId%22%3A%22Y1OMR4C7MF%22%2C%22algoliaKey%22%3A%225d01c83734dc36754d9e94cbf6f8964d%22%7D%2C%22ember-showdown-shiki%22%3A%7B%22languages%22%3A%5B%22javascript%22%2C%22typescript%22%2C%22glimmer-js%22%2C%22glimmer-ts%22%2C%22handlebars%22%2C%22json%22%2C%22diff%22%2C%22bash%22%5D%7D%2C%22exportApplicationGlobal%22%3Afalse%7D" /> 11<!-- EMBER_CLI_FASTBOOT_TITLE --><title>Ember.js - Deprecations</title> 12<link rel="preload" as="font" type="font/woff2" href="/fonts/Inter-roman.var.woff2?v=3.15" crossorigin> 13 14 <link integrity="" rel="stylesheet" href="/assets/vendor-ef0a57d48b8a337686be4ab4c5ac2b2a.css"> 15<link rel="stylesheet" href="/assets/chunk.3524.1b09cb7d805ee15af53c.css"/> 16 <link integrity="" rel="stylesheet" href="/assets/deprecation-app-d30b3d2418109aa97644d2ca3f7a5d47.css"> 17 18 19 </head> 20 <body> 21
21<script type="x/boundary" id="fastboot-body-start"></script>
21 22 23<header class="es-header" role="banner"> 24 <nav class="es-navbar " aria-label="Primary site navigation"> 25 <a class="navbar-brand-wrapper" href="https://www.emberjs.com"> 26 <img class="navbar-brand" src="/images/ember-logo.svg" alt="home" width="83" height="40"> 27 </a> 28 29 <button class="navbar-toggler" aria-expanded="false" type="button"> 30 Show Site Navigation 31 </button> 32 33 <ul class="navbar-list"> 34 <li class="navbar-list-item dropdown"> 35<!----> <button class="navbar-list-item-dropdown-toggle " aria-expanded="false" type="button"> 36 Docs 37 </button> 38<!----></li> 39 <li class="navbar-list-item dropdown"> 40<!----> <button class="navbar-list-item-dropdown-toggle " aria-expanded="false" type="button"> 41 Releases 42 </button> 43<!----></li> 44 <li class="navbar-list-item "> 45 <a class="navbar-list-item-link" href="https://blog.emberjs.com"> 46 Blog 47 </a> 48<!----></li> 49 <li class="navbar-list-item dropdown"> 50<!----> <button class="navbar-list-item-dropdown-toggle " aria-expanded="false" type="button"> 51 Community 52 </button> 53<!----></li> 54 <li class="navbar-list-item dropdown"> 55<!----> <button class="navbar-list-item-dropdown-toggle " aria-expanded="false" type="button"> 56 About 57 </button> 58<!----></li> 59 </ul> 60 61 <div class="navbar-end"> 62 63 <form class="search-form"> 64 <div class="search-input"> 65 <label class="visually-hidden" for="search-input">Search</label> 66 <input id="search-input" placeholder="Search deprecations" autocomplete="off" type="search"> 67</div> 68 69<div id="ember739" class="ember-tether ember-view ds-dropdown-results"> 70<!----></div> 71 </form> 72 73 </div> 74 </nav> 75</header> 76 77<main> 78 <div class="container"> 79 <button class="es-button toc-toggle" aria-label="expand table of contents" title="expand table of contents" type="button"> 80 81 <img src="/images/expand.svg" alt="expand table of contents"> 82 83</button> 84<div class="layout-grid"> 85 <!----> 86 <nav class="sidebar" aria-label="Desktop Table of Contents"> 87 <div class="padding-vertical-small bg-light-muted rounded-sm"> 88 <h2 class="large padding-bottom-small"> 89 Deprecations by Version: 90 </h2> 91 <div> 92 <button id="toggle-dep-menu-2-0-0" class="level-1 list-unstyled" aria-label="deprecations for version 2.0.0" aria-expanded="false" type="button"> 93 <span data-version="2.0.0">2.0</span> 94 95 </button> 96 97<!----></div> 98 <div> 99 <button id="toggle-dep-menu-2-1-0" class="level-1 list-unstyled" aria-label="deprecations for version 2.1.0" aria-expanded="false" type="button"> 100 <span data-version="2.1.0">2.1</span> 101 102 </button> 103 104<!----></div> 105 <div> 106 <button id="toggle-dep-menu-2-2-0" class="level-1 list-unstyled" aria-label="deprecations for version 2.2.0" aria-expanded="false" type="button"> 107 <span data-version="2.2.0">2.2</span> 108 109 </button> 110 111<!----></div> 112 <div> 113 <button id="toggle-dep-menu-2-3-0" class="level-1 list-unstyled" aria-label="deprecations for version 2.3.0" aria-expanded="false" type="button"> 114 <span data-version="2.3.0">2.3</span> 115 116 </button> 117 118<!----></div> 119 <div> 120 <button id="toggle-dep-menu-2-4-0" class="level-1 list-unstyled" aria-label="deprecations for version 2.4.0" aria-expanded="false" type="button"> 121 <span data-version="2.4.0">2.4</span> 122 123 </button> 124 125<!----></div> 126 <div> 127 <button id="toggle-dep-menu-2-6-0" class="level-1 list-unstyled" aria-label="deprecations for version 2.6.0" aria-expanded="false" type="button"> 128 <span data-version="2.6.0">2.6</span> 129 130 </button> 131 132<!----></div> 133 <div> 134 <button id="toggle-dep-menu-2-7-0" class="level-1 list-unstyled" aria-label="deprecations for version 2.7.0" aria-expanded="false" type="button"> 135 <span data-version="2.7.0">2.7</span> 136 137 </button> 138 139<!----></div> 140 <div> 141 <button id="toggle-dep-menu-2-8-0" class="level-1 list-unstyled" aria-label="deprecations for version 2.8.0" aria-expanded="false" type="button"> 142 <span data-version="2.8.0">2.8</span> 143 144 </button> 145 146<!----></div> 147 <div> 148 <button id="toggle-dep-menu-2-11-0" class="level-1 list-unstyled" aria-label="deprecations for version 2.11.0" aria-expanded="false" type="button"> 149 <span data-version="2.11.0">2.11</span> 150 151 </button> 152 153<!----></div> 154 <div> 155 <button id="toggle-dep-menu-2-12-0" class="level-1 list-unstyled" aria-label="deprecations for version 2.12.0" aria-expanded="false" type="button"> 156 <span data-version="2.12.0">2.12</span> 157 158 </button> 159 160<!----></div> 161 <div> 162 <button id="toggle-dep-menu-2-13-0" class="level-1 list-unstyled" aria-label="deprecations for version 2.13.0" aria-expanded="false" type="button"> 163 <span data-version="2.13.0">2.13</span> 164 165 </button> 166 167<!----></div> 168 <div> 169 <button id="toggle-dep-menu-2-14-0" class="level-1 list-unstyled" aria-label="deprecations for version 2.14.0" aria-expanded="false" type="button"> 170 <span data-version="2.14.0">2.14</span> 171 172 </button> 173 174<!----></div> 175 <div> 176 <button id="toggle-dep-menu-2-16-0" class="level-1 list-unstyled" aria-label="deprecations for version 2.16.0" aria-expanded="false" type="button"> 177 <span data-version="2.16.0">2.16</span> 178 179 </button> 180 181<!----></div> 182 <div> 183 <button id="toggle-dep-menu-2-18-0" class="level-1 list-unstyled" aria-label="deprecations for version 2.18.0" aria-expanded="false" type="button"> 184 <span data-version="2.18.0">2.18</span> 185 186 </button> 187 188<!----></div> 189</div> 190 <div id="back-to-top"><a href="#">⬠Back to Top</a></div> 191 </nav> 192 193 194 <div class="main ml-5 desktop"> 195 <h1>Deprecations Added in 196 Ember 197 2.x</h1> 198 <div class="intro"> 199 <p>What follows is a list of deprecations introduced to 200 Ember 201 during the 202 2.x 203 cycle.</p> 204 <p>For more information on deprecations in 205 Ember, see the 206 <a href="/" id="ember740" class="ember-view">main 207 deprecations page</a>.</p> 208 </div> 209 210 <h2 class="anchorable-toc rounded-lg padding-small">Deprecations Added 211 in 212 2.0.0 213 </h2> 214 <div class="padding-vertical-small bg-light-muted rounded-sm"> 215 216 <h3 id="toc_ember-string-fmt"> 217 Ember.String.fmt 218 219 <a title="Ember.String.fmt" href="/id/ember-string-fmt" id="ember741" class="ember-view"> 220 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512">
221 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 222 </svg> 223 </a> 224 </h3> 225 226 <div class="my-2"> 227 <div><span class="bold">until: </span>3.0.0</div> 228 <div><span class="bold">id: </span>ember-string-fmt</div> 229 </div> 230 <section> 231 <div id="ember742" class="ember-view"><p><code>Ember.String.fmt</code> was designed at a time when interpolating values in a JavaScript 232string was cumbersome. With template strings, it has become pratical to do it, and 233they are recommended over <code>Ember.String.fmt</code>.</p> 234<p>To use the examples from the documentation, you should update your code from:</p> 235<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">let</span><span style="color:#E1E4E8"> firstName </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> 'John'</span><span style="color:#E1E4E8">;</span></span> 236<span class="line"><span style="color:#F97583">let</span><span style="color:#E1E4E8"> lastName </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> 'Doe'</span><span style="color:#E1E4E8">;</span></span> 237<span class="line"></span> 238<span class="line"><span style="color:#9ECBFF">"Hello %@ %@"</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">fmt</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'John'</span><span style="color:#E1E4E8">, </span><span style="color:#9ECBFF">'Doe'</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// "Hello John Doe"</span></span> 239<span class="line"><span style="color:#9ECBFF">"Hello %@2, %@1"</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">fmt</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'John'</span><span style="color:#E1E4E8">, </span><span style="color:#9ECBFF">'Doe'</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// "Hello Doe, John"</span></span></code></pre> 240<p>To the following:</p> 241<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">let</span><span style="color:#E1E4E8"> firstName </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> 'John'</span><span style="color:#E1E4E8">;</span></span> 242<span class="line"><span style="color:#F97583">let</span><span style="color:#E1E4E8"> lastName </span><span style="color:#F97583">=</span><span style="color:#9ECBFF"> 'Doe'</span><span style="color:#E1E4E8">;</span></span> 243<span class="line"></span> 244<span class="line"><span style="color:#9ECBFF">`Hello ${</span><span style="color:#E1E4E8">firstName</span><span style="color:#9ECBFF">} ${</span><span style="color:#E1E4E8">lastName</span><span style="color:#9ECBFF">}`</span><span style="color:#7e8791"> // "Hello John Doe"</span></span> 245<span class="line"><span style="color:#9ECBFF">`Hello ${</span><span style="color:#E1E4E8">lastName</span><span style="color:#9ECBFF">}, ${</span><span style="color:#E1E4E8">firstName</span><span style="color:#9ECBFF">}
245`</span><span style="color:#7e8791"> // "Hello Doe, John"</span></span></code></pre> 246</div> 247 </section> 248</div> 249 <div class="padding-vertical-small bg-light-muted rounded-sm"> 250 251 <h3 id="toc_link-to-s-code-currentwhen-code"> 252 Link-to's <code>currentWhen</code> 253 254 <a title="Link-to's `currentWhen`" href="/id/link-to-s-code-currentwhen-code" id="ember743" class="ember-view"> 255 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 256 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 257 </svg> 258 </a> 259 </h3> 260 261 <div class="my-2"> 262 <div><span class="bold">until: </span>3.0.0</div> 263 <div><span class="bold">id: </span>link-to-s-code-currentwhen-code</div> 264 </div> 265 <section> 266 <div id="ember744" class="ember-view"><p>When developers wanted to customize in what route a <code>{{link-to}}</code> should be considered "active" they 267could pass it using <code>currentWhen</code>.</p> 268<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-handlebars line-numbers"><span class="line"><span style="color:#79B8FF">{{</span><span style="color:#F97583">#link-to</span><span style="color:#9ECBFF"> 'item'</span><span style="color:#FFAB70"> currentWhen</span><span style="color:#B392F0">=</span><span style="color:#9ECBFF">'index'</span><span style="color:#79B8FF">}}</span></span></code></pre> 269<p>Now <code>currentWhen</code> is deprecated in favour of the hyphenated <code>current-when</code>, with the exact 270same semantics:</p> 271<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-handlebars line-numbers"><span class="line"><span style="color:#79B8FF">{{</span><span style="color:#F97583">#link-to</span><span style="color:#9ECBFF"> 'item'</span><span style="color:#FFAB70"> current-when</span><span style="color:#B392F0">=</span><span style="color:#9ECBFF">'index'</span><span style="color:#79B8FF">}}</span></span></code></pre> 272</div> 273 </section> 274</div> 275 <h2 class="anchorable-toc rounded-lg padding-small">Deprecations Added 276 in 277 2.1.0 278 </h2> 279 <div class="padding-vertical-small bg-light-muted rounded-sm"> 280 281 <h3 id="toc_ember-application-registry-ember-applicationinstance-registry"> 282 Ember.Application#registry / Ember.ApplicationInstance#registry 283 284 <a title="Ember.Application#registry / Ember.ApplicationInstance#registry" href="/id/ember-application-registry-ember-applicationinstance-registry" id="ember745" class="ember-view"> 285 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 286 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 287 </svg> 288 </a> 289 </h3> 290 291 <div class="my-2"> 292 <div><span class="bold">until: </span>3.0.0</div> 293 <div><span class="bold">id: </span>ember-application-registry-ember-applicationinstance-registry</div> 294 </div> 295 <section> 296 <div id="ember746" class="ember-view"><p>When the container and registry were split, the registry was added to <code>Ember.Application</code> instances (provided to
297initializers as the first argument in 2.1) and <code>Ember.ApplicationInstance</code> instances (provided to instance initializers 298as the first argument). Unfortunately, this was done without making it clear that the <code>.registry</code> property on 299<code>Ember.Application</code> instances was private. This lead quite a few addons and applications to directly use the registry.</p> 300<p>During the 2.1 cycle a new feature (<code>ember-registry-container-reform</code>) was enabled to provide more 301public API's to access the <code>registry</code> functionality (without exposing all of the private internals).</p> 302<p>The following list can be used to migrate from <code>app.registry.*</code> usage to the new public API's:</p> 303<ul> 304<li><code>app.registry.resolve</code> -> <code>app.resolveRegistration</code></li> 305<li><code>app.registry.register</code> -> <code>app.register</code></li> 306<li><code>app.registry.unregister</code> -> <code>app.unregister</code></li> 307<li><code>app.registry.has</code> -> <code>app.hasRegistration</code></li> 308<li><code>app.registry.option</code> -> <code>app.registerOption</code></li> 309<li><code>app.registry.options</code> -> <code>app.registerOptions</code></li> 310<li><code>app.registry.getOptions</code> -> <code>app.registeredOptions</code></li> 311<li><code>app.registry.optionsForType</code> -> <code>app.registerOptionsForType</code></li> 312<li><code>app.registry.getOptionsForType</code> -> <code>app.registeredOptionsForType</code></li> 313<li><code>app.registry.injection</code> -> <code>app.inject</code></li> 314</ul> 315</div> 316 </section> 317</div> 318 <div class="padding-vertical-small bg-light-muted rounded-sm"> 319 320 <h3 id="toc_ember-applicationinstance-container"> 321 Ember.ApplicationInstance#container 322 323 <a title="Ember.ApplicationInstance#container" href="/id/ember-applicationinstance-container" id="ember747" class="ember-view"> 324 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 325 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 326 </svg> 327 </a> 328 </h3> 329 330 <div class="my-2"> 331 <div><span class="bold">until: </span>3.0.0</div> 332 <div><span class="bold">id: </span>ember-applicationinstance-container</div> 333 </div> 334 <section> 335 <div id="ember748" class="ember-view"><p>When instance initializers were added, using <code>appInstance.container.lookup</code> was suggested in lieu of using the first argument 336to initializers. Unfortunately, the <code>container</code> system has always been private and the previous initializer deprecation led 337users down the wrong path.</p> 338<p>During the 2.1 cycle a new feature (<code>ember-registry-container-reform</code>) was enabled to provide more 339public API's for accessing the container for looking up instances without exposing all of the private internals.</p> 340<p>Please refactor from using <code>appInstance.container.lookup</code> to <code>appInstance.lookup</code>.</p> 341<p>Before:</p> 342<div><div class="filename javascript">app/initializers/preload-store.js</div><pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> function</span><span style="color:#B392F0"> initialize</span><span style="color:#E1E4E8">(</span><span style="color:#FFAB70">appInstance</span><span style="color:#E1E4E8">) {</span></span> 343<span class="line"><span style="color:#F97583">
343 let</span><span style="color:#E1E4E8"> store </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> appInstance.container.</span><span style="color:#B392F0">lookup</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'service:store'</span><span style="color:#E1E4E8">);</span></span> 344<span class="line"></span> 345<span class="line"><span style="color:#E1E4E8"> store.</span><span style="color:#B392F0">pushPayload</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">`<payload here>`</span><span style="color:#E1E4E8">);</span></span> 346<span class="line"><span style="color:#E1E4E8">}</span></span> 347<span class="line"></span> 348<span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> {</span></span> 349<span class="line"><span style="color:#E1E4E8"> name: </span><span style="color:#9ECBFF">'preload-store'</span><span style="color:#E1E4E8">,</span></span> 350<span class="line"><span style="color:#E1E4E8"> initialize: initialize</span></span> 351<span class="line"><span style="color:#E1E4E8">}</span></span></code></pre> 352</div> 353<p>After:</p> 354<div><div class="filename javascript">app/instance-initializers/preload-store.js</div><pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> function</span><span style="color:#B392F0"> initialize</span><span style="color:#E1E4E8">(</span><span style="color:#FFAB70">appInstance</span><span style="color:#E1E4E8">) {</span></span> 355<span class="line"><span style="color:#F97583"> let</span><span style="color:#E1E4E8"> store </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> appInstance.</span><span style="color:#B392F0">lookup</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'service:store'</span><span style="color:#E1E4E8">);</span></span> 356<span class="line"></span> 357<span class="line"><span style="color:#E1E4E8"> store.</span><span style="color:#B392F0">pushPayload</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">`<payload here>`</span><span style="color:#E1E4E8">);</span></span> 358<span class="line"><span style="color:#E1E4E8">}</span></span> 359<span class="line"></span> 360<span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> {</span></span> 361<span class="line"><span style="color:#E1E4E8"> name: </span><span style="color:#9ECBFF">'preload-store'</span><span style="color:#E1E4E8">,</span></span> 362<span class="line"><span style="color:#E1E4E8"> initialize: initialize</span></span> 363<span class="line"><span style="color:#E1E4E8">}</span></span></code></pre> 364</div> 365</div> 366 </section> 367</div> 368 <div class="padding-vertical-small bg-light-muted rounded-sm"> 369 370 <h3 id="toc_ember-component-currentstate"> 371 Ember.Component#currentState 372 373 <a title="Ember.Component#currentState" href="/id/ember-component-currentstate" id="ember749" class="ember-view"> 374 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 375 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 376 </svg> 377 </a> 378 </h3> 379 380 <div class="my-2"> 381 <div><span class="bold">until: </span>2.3.0</div> 382 <div><span class="bold">id: </span>ember-component-currentstate</div> 383 </div> 384 <section> 385 <div id="ember750" class="ember-view"><p>The <code>currentState</code> property on <code>Ember.Component</code> instances is a private property that Ember uses 386internally to deal with the various states a component can be in (in DOM, pre-render, destroying, etc). Unfortunately, 387this removes a pretty common term (<code>currentState</code> might be used for many things in a user-land component).</p> 388<p>In Ember 2.1 the internal <code>.currentState</code> property has been moved to <code>_currentState</code> to avoid conflicts.</p> 389<p>Please keep in mind that <code>.currentState</code> / <code>._currentState</code> is still private and should not be used/relied upon 390outside of Ember internals.</p> 391</div> 392 </section> 393</div> 394 <div class="padding-vertical-small bg-light-muted rounded-sm"> 395 396 <h3 id="toc_ember-component-defaultlayout"> 397 Ember.Component#defaultLayout 398 399 <a title="Ember.Component#defaultLayout" href="/id/ember-component-defaultlayout" id="ember751" class="ember-view"> 400 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512">
401 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 402 </svg> 403 </a> 404 </h3> 405 406 <div class="my-2"> 407 <div><span class="bold">until: </span>3.0.0</div> 408 <div><span class="bold">id: </span>ember-component-defaultlayout</div> 409 </div> 410 <section> 411 <div id="ember752" class="ember-view"><p>Specifying a <code>defaultLayout</code> to a component is deprecated in favor of specifying <code>layout</code> directly. <code>defaultLayout</code> was 412often used in order to allow inheriting components to fallback to their parents <code>defaultLayout</code> if a custom <code>layout</code> was 413not provided. Due to the way a components layout is looked up naturally, this is true when using <code>layout</code> properties in 414both locations. Changing the <code>layout</code> detection process allows initial render speed (with many components) to be 415improved pretty significantly.</p> 416<p>Before:</p> 417<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#7e8791">// Ember < 2.1</span></span> 418<span class="line"><span style="color:#F97583">import</span><span style="color:#E1E4E8"> layout </span><span style="color:#F97583">from</span><span style="color:#9ECBFF"> '../templates/some-thing-lol'</span><span style="color:#E1E4E8">;</span></span> 419<span class="line"></span> 420<span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Ember.Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 421<span class="line"><span style="color:#E1E4E8"> defaultLayout: layout</span></span> 422<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 423<p>After:</p> 424<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#7e8791">// Ember 2.1 and later</span></span> 425<span class="line"><span style="color:#F97583">import</span><span style="color:#E1E4E8"> layout </span><span style="color:#F97583">from</span><span style="color:#9ECBFF"> '../templates/some-thing-lol'</span><span style="color:#E1E4E8">;</span></span> 426<span class="line"></span> 427<span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Ember.Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 428<span class="line"><span style="color:#E1E4E8"> layout: layout</span></span> 429<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 430</div> 431 </section> 432</div> 433 <div class="padding-vertical-small bg-light-muted rounded-sm"> 434 435 <h3 id="toc_ember-debug-function-options"> 436 Ember debug function options 437 438 <a title="Ember debug function options" href="/id/ember-debug-function-options" id="ember753" class="ember-view"> 439 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512">
440 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 441 </svg> 442 </a> 443 </h3> 444 445 <div class="my-2"> 446 <div><span class="bold">until: </span>3.0.0</div> 447 <div><span class="bold">id: </span>ember-debug-function-options</div> 448 </div> 449 <section> 450 <div id="ember754" class="ember-view"><p>Starting in Ember 2.1 various debug functions now require a third argument (commonly called <code>options</code>).</p> 451<p><code>id</code> is required by all methods listed below, and the deprecation related methods also require an <code>until</code> property.</p> 452<ul> 453<li><code>Ember.deprecate</code></li> 454<li><code>Ember.deprecateFunc</code></li> 455<li><code>Ember.computed.deprecatingAlias</code></li> 456<li><code>Ember.warn</code></li> 457</ul> 458<p>The <code>id</code> property is intended to allow runtime debug handlers to uniquely identify the source, and the <code>until</code> property is used 459to indicate the future version when the deprecated behavior will no longer exist.</p> 460<p>The goal of these changes is to allow tools like 461<a href="https://github.com/mixonic/ember-cli-deprecation-workflow">ember-cli-deprecation-workflow</a> to make managing 462these deprecations and warnings much easier (by matching on the <code>id</code> instead of the full deprecation/warn message).</p> 463</div> 464 </section> 465</div> 466 <div class="padding-vertical-small bg-light-muted rounded-sm"> 467 468 <h3 id="toc_initializer-arity"> 469 Initializer Arity 470 471 <a title="Initializer Arity" href="/id/initializer-arity" id="ember755" class="ember-view"> 472 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 473 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 474 </svg> 475 </a> 476 </h3> 477 478 <div class="my-2"> 479 <div><span class="bold">until: </span>3.0.0</div> 480 <div><span class="bold">id: </span>initializer-arity</div> 481 </div> 482 <section> 483 <div id="ember756" class="ember-view"><p>In prior versions of Ember initializers have taken two arguments (generally labeled as 484<code>container</code> and <code>application</code>). Starting with Ember 2.1 providing two arguments to an 485<code>initializer</code> will trigger a deprecation.</p> 486<p>The following initializer for Ember 2.0 will trigger a deprecation:</p> 487<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> function</span><span style="color:#B392F0"> initialize</span><span style="color:#E1E4E8">(</span><span style="color:#FFAB70">container</span><span style="color:#E1E4E8">, </span><span style="color:#FFAB70">application</span><span style="color:#E1E4E8">) {</span></span> 488<span class="line"><span style="color:#E1E4E8"> application.</span><span style="color:#B392F0">inject</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'route'</span><span style="color:#E1E4E8">, </span><span style="color:#9ECBFF">'service:session'</span><span style="color:#E1E4E8">);</span></span> 489<span class="line"><span style="color:#E1E4E8">}</span></span> 490<span class="line"></span> 491<span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> {</span></span> 492<span class="line"><span style="color:#E1E4E8"> name: </span><span style="color:#9ECBFF">'inject-session'</span><span style="color:#E1E4E8">,</span></span> 493<span class="line"><span style="color:#E1E4E8"> initialize: initialize</span></span> 494<span class="line"><span style="color:#E1E4E8">}</span></span></code></pre> 495<p>To clear the deprecation, remove the first argument (<code>container</code> in the above example):</p> 496<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> function</span><span style="color:#B392F0"> initialize</span><span style="color:#E1E4E8">(</span><span style="color:#FFAB70">application</span><span style="color:#E1E4E8">) {</span></span> 497<span class="line"><span style="color:#E1E4E8"> application.</span><span style="color:#B392F0">inject</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'route'</span><span style="color:#E1E4E8">, </span><span style="color:#9ECBFF">'service:session'</span><span style="color:#E1E4E8">);</span></span> 498<span class="line"><span style="color:#E1E4E8">}</span></span> 499<span class="line"></span> 500<span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> {</span></span> 501<span class="line"><span style="color:#E1E4E8"> name: </span><span style="color:#9ECBFF">'inject-session'</span><span style="color:#E1E4E8">,</span></span> 502<span class="line"><span style="color:#E1E4E8"> initialize: initialize</span></span> 503<span class="line"><span style="color:#E1E4E8">}</span></span></code></pre> 504<p>In some cases an addon might need to support both versions of Ember with the same initializer, 505one way to do this without triggering a deprecation would be the following (using the same 506example as above):</p> 507<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> function</span><span style="color:#B392F0"> initialize</span><span style="color:#E1E4E8">() {</span></span> 508<span class="line"><span style="color:#F97583">
508 let</span><span style="color:#E1E4E8"> application </span><span style="color:#F97583">=</span><span style="color:#79B8FF"> arguments</span><span style="color:#E1E4E8">[</span><span style="color:#79B8FF">1</span><span style="color:#E1E4E8">] </span><span style="color:#F97583">||</span><span style="color:#79B8FF"> arguments</span><span style="color:#E1E4E8">[</span><span style="color:#79B8FF">0</span><span style="color:#E1E4E8">];</span></span> 509<span class="line"><span style="color:#E1E4E8"> application.</span><span style="color:#B392F0">inject</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'route'</span><span style="color:#E1E4E8">, </span><span style="color:#9ECBFF">'service:session'</span><span style="color:#E1E4E8">);</span></span> 510<span class="line"><span style="color:#E1E4E8">}</span></span> 511<span class="line"></span> 512<span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> {</span></span> 513<span class="line"><span style="color:#E1E4E8"> name: </span><span style="color:#9ECBFF">'inject-session'</span><span style="color:#E1E4E8">,</span></span> 514<span class="line"><span style="color:#E1E4E8"> initialize: initialize</span></span> 515<span class="line"><span style="color:#E1E4E8">}</span></span></code></pre> 516</div> 517 </section> 518</div> 519 <h2 class="anchorable-toc rounded-lg padding-small">Deprecations Added 520 in 521 2.2.0 522 </h2> 523 <div class="padding-vertical-small bg-light-muted rounded-sm"> 524 525 <h3 id="toc_function-as-test-in-ember-deprecate-ember-warn-ember-assert"> 526 Function as test in Ember.deprecate, Ember.warn, Ember.assert 527 528 <a title="Function as test in Ember.deprecate, Ember.warn, Ember.assert" href="/id/function-as-test-in-ember-deprecate-ember-warn-ember-assert" id="ember757" class="ember-view"> 529 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 530 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 531 </svg> 532 </a> 533 </h3> 534 535 <div class="my-2"> 536 <div><span class="bold">until: </span>2.5.0</div> 537 <div><span class="bold">id: </span>function-as-test-in-ember-deprecate-ember-warn-ember-assert</div> 538 </div> 539 <section> 540 <div id="ember758" class="ember-view"><p>Calling <code>Ember.deprecate</code>, <code>Ember.warn</code> or <code>Ember.assert</code> with a function as test argument is deprecated.</p> 541<p>You can no longer pass arguments of type <code>function</code> to these methods. Following calls will trigger deprecations:</p> 542<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">const</span><span style="color:#79B8FF"> message</span><span style="color:#F97583"> =</span><span style="color:#9ECBFF"> 'Test message.'</span><span style="color:#E1E4E8">;</span></span> 543<span class="line"><span style="color:#F97583">const</span><span style="color:#79B8FF"> options</span><span style="color:#F97583"> =</span><span style="color:#E1E4E8"> { id: </span><span style="color:#9ECBFF">'test'</span><span style="color:#E1E4E8">, until: </span><span style="color:#9ECBFF">'3.0.0'</span><span style="color:#E1E4E8"> };</span></span> 544<span class="line"></span> 545<span class="line"><span style="color:#7e8791">// passing function</span></span> 546<span class="line"><span style="color:#E1E4E8">Ember.</span><span style="color:#B392F0">deprecate</span><span style="color:#E1E4E8">(message, </span><span style="color:#F97583">function</span><span style="color:#E1E4E8">() {</span></span> 547<span class="line"><span style="color:#F97583"> return</span><span style="color:#79B8FF"> true</span><span style="color:#E1E4E8">;</span></span> 548<span class="line"><span style="color:#E1E4E8">}, options);</span></span> 549<span class="line"></span> 550<span class="line"><span style="color:#F97583">const</span><span style="color:#79B8FF"> myConstructor</span><span style="color:#F97583"> =</span><span style="color:#E1E4E8"> {}
550.</span><span style="color:#79B8FF">constructor</span><span style="color:#E1E4E8">;</span></span> 551<span class="line"></span> 552<span class="line"><span style="color:#7e8791">// passing constructor (also a function)</span></span> 553<span class="line"><span style="color:#E1E4E8">Ember.</span><span style="color:#B392F0">warn</span><span style="color:#E1E4E8">(message, myConstructor, options);</span></span> 554<span class="line"></span> 555<span class="line"><span style="color:#7e8791">// passing function with double arrow syntax</span></span> 556<span class="line"><span style="color:#E1E4E8">Ember.</span><span style="color:#B392F0">assert</span><span style="color:#E1E4E8">(message, () </span><span style="color:#F97583">=></span><span style="color:#79B8FF"> true</span><span style="color:#E1E4E8">, options);</span></span></code></pre> 557<p><a href="http://ember-twiddle.com/34d36b9121e017d2388f">Demo.</a></p> 558<h4 id="refactoring">Refactoring</h4> 559<p>You have 3 options to refactor second argument from <code>function</code> to <code>boolean</code>:</p> 560<ol> 561<li>Use <a href="https://en.wikipedia.org/wiki/Immediately-invoked_function_expression">IIFE</a>.</li> 562<li>Use <code>!!Constructor</code> for constructors.</li> 563<li>Pass <code>boolean</code> directly instead of wrapping it in function.</li> 564</ol> 565<p>Example:</p> 566<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#7e8791">// ... message, options omitted for brevity</span></span> 567<span class="line"></span> 568<span class="line"><span style="color:#7e8791">// passing IIFE (1)</span></span> 569<span class="line"><span style="color:#E1E4E8">Ember.</span><span style="color:#B392F0">deprecate</span><span style="color:#E1E4E8">(message, (</span><span style="color:#F97583">function</span><span style="color:#E1E4E8">() {</span></span> 570<span class="line"><span style="color:#F97583"> return</span><span style="color:#79B8FF"> true</span><span style="color:#E1E4E8">;</span></span> 571<span class="line"><span style="color:#E1E4E8">})(), options);</span></span> 572<span class="line"></span> 573<span class="line"><span style="color:#F97583">const</span><span style="color:#79B8FF"> myConstructor</span><span style="color:#F97583"> =</span><span style="color:#E1E4E8"> {}.</span><span style="color:#79B8FF">constructor</span><span style="color:#E1E4E8">;</span></span> 574<span class="line"></span> 575<span class="line"><span style="color:#7e8791">// passing !!constructor (2)</span></span> 576<span class="line"><span style="color:#E1E4E8">Ember.</span><span style="color:#B392F0">warn</span><span style="color:#E1E4E8">(message, </span><span style="color:#F97583">!!</span><span style="color:#E1E4E8">myConstructor, options);</span></span> 577<span class="line"></span> 578<span class="line"><span style="color:#7e8791">// passing boolean directly (3)</span></span> 579<span class="line"><span style="color:#E1E4E8">Ember.</span><span style="color:#B392F0">assert</span><span style="color:#E1E4E8">(message, </span><span style="color:#79B8FF">true</span><span style="color:#E1E4E8">, options);</span></span></code></pre> 580<p><a href="http://ember-twiddle.com/ed90d0c7812914f09a3f">Demo.</a></p> 581<p>In a future version functions will be treated as truthy values instead of being executed.</p> 582</div> 583 </section> 584</div> 585 <h2 class="anchorable-toc rounded-lg padding-small">Deprecations Added 586 in 587 2.3.0 588 </h2> 589 <div class="padding-vertical-small bg-light-muted rounded-sm"> 590 591 <h3 id="toc_injected-container-access"> 592 Injected container access 593 594 <a title="Injected container access" href="/id/injected-container-access" id="ember759" class="ember-view"> 595 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 596 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 597 </svg> 598 </a> 599 </h3> 600 601 <div class="my-2"> 602 <div><span class="bold">until: </span>3.0.0</div> 603 <div><span class="bold">id: </span>injected-container-access</div> 604 </div> 605 <section> 606 <div id="ember760" class="ember-view"><p><code>this.container</code> has been private API since at least Ember 1.0.0. Unfortunately, there was not a public API available 607to use as an alternative. In the Ember 2.1 cycle a number of public API's were added to instance initializer
607s 608that allowed access to the container and registry (see <a href="http://emberjs.com/api/classes/ContainerProxyMixin.html">here</a> 609and <a href="http://emberjs.com/api/classes/RegistryProxyMixin.html">here</a> for details of the public API's), but this new public 610API surface was not added to individual instances that were using <code>this.container</code> directly.</p> 611<p>Ember 2.3 now provides a public API for usage from within any instances that were instantiated from the container.</p> 612<p>This refactor is relatively straight forward for applications, but still leaves a few gaps for addons that want to function 613without deprecation on all versions while still using the newer paradigms. <a href="https://github.com/rwjblue/ember-getowner-polyfill">ember-getowner-polyfill</a> 614was created for this exact reason.</p> 615<p>Note that the <code>getOwner</code> API is natively available in Ember versions 2.3 and up, so you don't need to install a polyfill. Use it like you would use any other API, as in the <code>After:</code> example.</p> 616<p>Before:</p> 617<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#7e8791">// Ember < 2.3</span></span> 618<span class="line"><span style="color:#F97583">import</span><span style="color:#E1E4E8"> Ember </span><span style="color:#F97583">from</span><span style="color:#9ECBFF"> 'ember'</span><span style="color:#E1E4E8">;</span></span> 619<span class="line"></span> 620<span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Ember.Helper.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 621<span class="line"><span style="color:#B392F0"> init</span><span style="color:#E1E4E8">() {</span></span> 622<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">
622_super</span><span style="color:#E1E4E8">(</span><span style="color:#F97583">...</span><span style="color:#79B8FF">arguments</span><span style="color:#E1E4E8">);</span></span> 623<span class="line"></span> 624<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.customThing </span><span style="color:#F97583">=</span><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.container.</span><span style="color:#B392F0">lookup</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'custom:thing'</span><span style="color:#E1E4E8">);</span></span> 625<span class="line"><span style="color:#E1E4E8"> }</span></span> 626<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 627<p>After:</p> 628<p>do an ember install of the polyfill.</p> 629<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-bash line-numbers"><span class="line"><span style="color:#B392F0">ember</span><span style="color:#9ECBFF"> install</span><span style="color:#9ECBFF"> ember-getowner-polyfill</span></span></code></pre> 630<p>After it installs, use as follows:-</p> 631<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#7e8791">// Ember < 2.3 needs the polyfill installed, Ember >= 2.3 available natively.</span></span> 632<span class="line"><span style="color:#F97583">import</span><span style="color:#E1E4E8"> Ember </span><span style="color:#F97583">from</span><span style="color:#9ECBFF"> 'ember'</span><span style="color:#E1E4E8">;</span></span> 633<span class="line"></span> 634<span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Ember.Helper.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 635<span class="line"><span style="color:#B392F0"> init</span><span style="color:#E1E4E8">() {</span></span> 636<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">
636_super</span><span style="color:#E1E4E8">(</span><span style="color:#F97583">...</span><span style="color:#79B8FF">arguments</span><span style="color:#E1E4E8">);</span></span> 637<span class="line"></span> 638<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.customThing </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> Ember.</span><span style="color:#B392F0">getOwner</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">this</span><span style="color:#E1E4E8">).</span><span style="color:#B392F0">lookup</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'custom:thing'</span><span style="color:#E1E4E8">);</span></span> 639<span class="line"><span style="color:#E1E4E8"> }</span></span> 640<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 641</div> 642 </section> 643</div> 644 <h2 class="anchorable-toc rounded-lg padding-small">Deprecations Added 645 in 646 2.4.0 647 </h2> 648 <div class="padding-vertical-small bg-light-muted rounded-sm"> 649 650 <h3 id="toc_render-helper-with-block"> 651 render helper with block 652 653 <a title="render helper with block" href="/id/render-helper-with-block" id="ember761" class="ember-view"> 654 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 655 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 656 </svg> 657 </a> 658 </h3> 659 660 <div class="my-2"> 661 <div><span class="bold">until: </span>2.4.0</div> 662 <div><span class="bold">id: </span>render-helper-with-block</div> 663 </div> 664 <section> 665 <div id="ember762" class="ember-view"><p>The <code>{{render}}</code> helper was never intended to support a block form, but unfortunately (mostly 666due to various refactorings in 1.10 and 1.13) it started working in block form. Since this was 667not properly engineered, there are a number of caveats (i.e. the <code>controller</code> and <code>target</code> values of 668anything inside the block are incorrect) that prevent continued support.</p> 669<p>Support the following forms will be removed after 2.4:</p> 670<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-handlebars line-numbers"><span class="line"><span style="color:#79B8FF">{{</span><span style="color:#F97583">#render</span><span style="color:#9ECBFF"> 'foo'</span><span style="color:#79B8FF">}}</span></span> 671<span class="line"><span style="color:#E1E4E8"> <</span><span style="color:#85E89D">p</span><span style="color:#E1E4E8">>Stuff Here</</span><span style="color:#85E89D">p</span><span style="color:#E1E4E8">></span></span> 672<span class="line"><span style="color:#79B8FF">{{</span><span style="color:#F97583">/render</span><span style="color:#79B8FF">}}</span></span></code></pre> 673<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-handlebars line-numbers"><span class="line"><span style="color:#79B8FF">{{</span><span style="color:#F97583">#render</span><span style="color:#9ECBFF"> 'foo'</span><span style="color:#FFAB70">
673 someModel</span><span style="color:#79B8FF">}}</span></span> 674<span class="line"><span style="color:#E1E4E8"> <</span><span style="color:#85E89D">p</span><span style="color:#E1E4E8">>Stuff Here</</span><span style="color:#85E89D">p</span><span style="color:#E1E4E8">></span></span> 675<span class="line"><span style="color:#79B8FF">{{</span><span style="color:#F97583">/render</span><span style="color:#79B8FF">}}</span></span></code></pre> 676</div> 677 </section> 678</div> 679 <h2 class="anchorable-toc rounded-lg padding-small">Deprecations Added 680 in 681 2.6.0 682 </h2> 683 <div class="padding-vertical-small bg-light-muted rounded-sm"> 684 685 <h3 id="toc_ember-component-didinitattrs"> 686 Ember.Component#didInitAttrs 687 688 <a title="Ember.Component#didInitAttrs" href="/id/ember-component-didinitattrs" id="ember763" class="ember-view"> 689 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 690 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 691 </svg> 692 </a> 693 </h3> 694 695 <div class="my-2"> 696 <div><span class="bold">until: </span>3.0.0</div> 697 <div><span class="bold">id: </span>ember-component-didinitattrs</div> 698 </div> 699 <section> 700 <div id="ember764" class="ember-view"><p>Using <code>didInitAttrs</code> is deprecated in favour of using <code>init</code>. When <code>init</code> is called the attrs sent in with the component will be 701available after calling <code>this._super(...arguments)</code></p> 702<p>Given a htmlbars template like this:</p> 703<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-handlebars line-numbers"><span class="line"><span style="color:#79B8FF">{{</span><span style="color:#FFAB70">my-component</span><span style="color:#FFAB70"> handle</span><span style="color:#B392F0">=</span><span style="color:#9ECBFF">"@tomdale"</span><span style="color:#79B8FF">}}</span></span></code></pre> 704<p>Before:</p> 705<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Ember.Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 706<span class="line"><span style="color:#B392F0"> didInitAttrs</span><span style="color:#E1E4E8">() {</span></span> 707<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">
707_super</span><span style="color:#E1E4E8">(</span><span style="color:#F97583">...</span><span style="color:#79B8FF">arguments</span><span style="color:#E1E4E8">);</span></span> 708<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">get</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'handle'</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// @tomdale</span></span> 709<span class="line"><span style="color:#E1E4E8"> }</span></span> 710<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 711<p>After:</p> 712<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Ember.Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 713<span class="line"><span style="color:#B392F0"> init</span><span style="color:#E1E4E8">() {</span></span> 714<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">
714_super</span><span style="color:#E1E4E8">(</span><span style="color:#F97583">...</span><span style="color:#79B8FF">arguments</span><span style="color:#E1E4E8">);</span></span> 715<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">get</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'handle'</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// @tomdale</span></span> 716<span class="line"><span style="color:#E1E4E8"> }</span></span> 717<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 718</div> 719 </section> 720</div> 721 <div class="padding-vertical-small bg-light-muted rounded-sm"> 722 723 <h3 id="toc_legacy-support-addons"> 724 Legacy support addons 725 726 <a title="Legacy support addons" href="/id/legacy-support-addons" id="ember765" class="ember-view"> 727 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 728 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 729 </svg> 730 </a> 731 </h3> 732 733 <div class="my-2"> 734 <div><span class="bold">until: </span>3.0.0</div> 735 <div><span class="bold">id: </span>legacy-support-addons</div> 736 </div> 737 <section> 738 <div id="ember766" class="ember-view"><p>Ember provides addons <a href="https://github.com/emberjs/ember-legacy-views">ember-legacy-views</a> and 739<a href="https://github.com/emberjs/ember-legacy-controllers">ember-legacy-controllers</a> that allow for projects to continue 740using some legacy concepts in 2.x. 741Beginning in 2.4, use of these addons is now deprecated.</p> 742<p>See the deprecation guide sections on <a href="http://emberjs.com/deprecations/v1.x/#toc_ember-view">removing views</a>, 743<a href="http://emberjs.com/deprecations/v1.x/#toc_arraycontroller"><code>ArrayController</code></a>, 744and <a href="http://emberjs.com/deprecations/v1.x/#toc_objectcontroller"><code>ObjectController</code></a> 745for information on migration.</p> 746<p>Once view and controller deprecations are removed, you can remove the addons with the command: 747<code>npm uninstall --save-dev ember-legacy-views && npm uninstall ember-legacy-controllers</code></p> 748</div> 749 </section> 750</div> 751 <div class="padding-vertical-small bg-light-muted rounded-sm"> 752 753 <h3 id="toc_model-param-in-code-render-code-helper"> 754 Model param in render helper 755 756 <a title="Model param in render helper" href="/id/model-param-in-code-render-code-helper" id="ember767" class="ember-view"> 757 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 758 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 759 </svg> 760 </a> 761 </h3> 762 763 <div class="my-2"> 764 <div><span class="bold">until: </span>3.0.0</div> 765 <div><span class="bold">id: </span>model-param-in-code-render-code-helper</div> 766 </div> 767 <section> 768 <div id="ember768" class="ember-view"><p>Using the model param in the <code>{{render</code>
768 helper is deprecated in favor of using 769components. Please refactor to a component and invoke thusly:</p> 770<p>For example, if you had:</p> 771<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-handlebars line-numbers"><span class="line"><span style="color:#79B8FF">{{</span><span style="color:#FFAB70">render</span><span style="color:#9ECBFF"> 'foo-bar'</span><span style="color:#FFAB70"> someModel</span><span style="color:#79B8FF">}}</span></span></code></pre> 772<div><div class="filename handlebars">app/templates/foo-bar.hbs</div><pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-handlebars line-numbers"><span class="line"><span style="color:#E1E4E8"><</span><span style="color:#85E89D">p</span><span style="color:#E1E4E8">></span><span style="color:#79B8FF">{{</span><span style="color:#FFAB70">someProp</span><span style="color:#79B8FF">}}</span><span style="color:#E1E4E8"> template stuff here</</span><span style="color:#85E89D">p</span><span style="color:#E1E4E8">></span></span></code></pre> 773</div> 774<div><div class="filename javascript">app/controllers/foo-bar.js</div><pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Controller.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 775<span class="line"><span style="color:#E1E4E8"> someProp: Ember.</span><span style="color:#B392F0">computed</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'model.yolo'</span><span style="color:#E1E4E8">, </span><span style="color:#F97583">function</span><span style="color:#E1E4E8">() {</span></span> 776<span class="line"><span style="color:#F97583"> return</span><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">get</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'model.yolo'</span><span style="color:#E1E4E8">);</span></span> 777<span class="line"><span style="color:#E1E4E8"> })</span></span> 778<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 779</div> 780<p>Would be refactored to:</p> 781<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-handlebars line-numbers"><span class="line"><span style="color:#79B8FF">{{</span><span style="color:#FFAB70">foo-bar</span><span style="color:#FFAB70"> model</span><span style="color:#B392F0">=</span><span style="color:#FFAB70">someModel</span><span style="color:#79B8FF">}}</span></span></code></pre> 782<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-handlebars line-numbers"><span class="line"><span style="color:#E1E4E8"><</span><span style="color:#85E89D">p</span><span style="color:#E1E4E8">></span><span style="color:#79B8FF">{{</span><span style="color:#FFAB70">someProp</span><span style="color:#79B8FF">}}</span><span style="color:#E1E4E8"> template stuff here</</span><span style="color:#85E89D">p</span><span style="color:#E1E4E8">></span></span></code></pre> 783<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 784<span class="line"><span style="color:#E1E4E8"> someProp: Ember.</span><span style="color:#B392F0">computed</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'model.yolo'</span><span style="color:#E1E4E8">, </span><span style="color:#F97583">function</span><span style="color:#E1E4E8">() {</span></span> 785<span class="line"><span style="color:#F97583"> return</span><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">
785get</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'model.yolo'</span><span style="color:#E1E4E8">);</span></span> 786<span class="line"><span style="color:#E1E4E8"> })</span></span> 787<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 788</div> 789 </section> 790</div> 791 <h2 class="anchorable-toc rounded-lg padding-small">Deprecations Added 792 in 793 2.7.0 794 </h2> 795 <div class="padding-vertical-small bg-light-muted rounded-sm"> 796 797 <h3 id="toc_ember-binding"> 798 Ember.Binding 799 800 <a title="Ember.Binding" href="/id/ember-binding" id="ember769" class="ember-view"> 801 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 802 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 803 </svg> 804 </a> 805 </h3> 806 807 <div class="my-2"> 808 <div><span class="bold">until: </span>3.0.0</div> 809 <div><span class="bold">id: </span>ember-binding</div> 810 </div> 811 <section> 812 <div id="ember770" class="ember-view"><p><code>Ember.Binding</code> has not been needed for some time and is deprecated in favor of 813computed properties and services (depending on what you were binding to). It is 814recommended that you take the following actions:</p> 815<ol> 816<li>Refactor global bindings to services</li> 817<li>Refactor <code>oneWay</code> bindings to <code>readOnly</code> computed properties</li> 818<li>Refactor all other bindings to <code>alias</code> computed properties</li> 819</ol> 820<p>The <a href="https://guides.emberjs.com/v2.5.0/applications/services/">guide on services</a> is a good place 821to start for creating and consuming services to replace your global bindings. 822In general though, you will replace your global with a service and consume it 823like this:</p> 824<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Ember.Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 825<span class="line"><span style="color:#7e8791"> // will load the service in file /app/services/cool-service.js</span></span> 826<span class="line"><span style="color:#E1E4E8"> coolService: Ember.inject.</span><span style="color:#B392F0">service</span><span style="color:#E1E4E8">()</span></span> 827<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 828<p>This would replace a binding that may have looked like this:</p> 829<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Ember.Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 830<span class="line"><span style="color:#E1E4E8"> boringObjectBinding: </span><span style="color:#9ECBFF">'MyApp.boringObject'</span></span> 831<span class="line"><span style="color:#E1E4E8">});
831</span></span></code></pre> 832<p>Refactoring local bindings to computed properties can be achieved with 833less work:</p> 834<p>If you had this:</p> 835<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Ember.Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 836<span class="line"><span style="color:#E1E4E8"> thingContainer: â¦,</span></span> 837<span class="line"><span style="color:#E1E4E8"> thingOneBinding: Ember.Binding.</span><span style="color:#B392F0">oneWay</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'thingContainer.thingOne'</span><span style="color:#E1E4E8">),</span></span> 838<span class="line"><span style="color:#E1E4E8"> thingTwoBinding: </span><span style="color:#9ECBFF">'thingContainer.thingTwo'</span></span> 839<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 840<p>You could change it to this:</p> 841<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Ember.Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 842<span class="line"><span style="color:#E1E4E8"> thingContainer: â¦,</span></span> 843<span class="line"><span style="color:#E1E4E8"> thingOne: Ember.computed.</span><span style="color:#B392F0">readOnly</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'thingContainer.thingOne'</span><span style="color:#E1E4E8">),</span></span> 844<span class="line"><span style="color:#E1E4E8"> thingTwo: Ember.computed.</span><span style="color:#B392F0">alias</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'thingContainer.thingTwo'</span><span style="color:#E1E4E8">)</span></span> 845<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 846<p>See the <a href="https://guides.emberjs.com/v2.5.0/object-model/computed-properties/">guide on computed properties</a> for 847further reading.</p> 848</div> 849 </section> 850</div> 851 <div class="padding-vertical-small bg-light-muted rounded-sm"> 852 853 <h3 id="toc_ember-metal-ember-backburner"> 854 Ember.Backburner 855 856 <a title="Ember.Backburner" href="/id/ember-metal-ember-backburner" id="ember771" class="ember-view"> 857 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 858 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 859 </svg> 860 </a> 861 </h3> 862 863 <div class="my-2"> 864 <div><span class="bold">until: </span>2.8.0</div> 865 <div><span class="bold">id: </span>ember-metal.ember-backburner</div> 866 </div> 867 <section> 868 <div id="ember772" class="ember-view"><p><code>Ember.Backburner</code> was private throughout the Ember 2.x series and will be 869removed <em>after</em> 2.8.</p> 870</div> 871 </section> 872</div> 873 <h2 class="anchorable-toc rounded-lg padding-small">Deprecations Added 874 in 875 2.8.0 876 </h2> 877 <div class="padding-vertical-small bg-light-muted rounded-sm"> 878 879 <h3 id="toc_ember-runtime-enumerable-contains"> 880 Enumerable#contains 881 882 <a title="Enumerable#contains" href="/id/ember-runtime-enumerable-contains" id="ember773" class="ember-view"> 883 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512">
884 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 885 </svg> 886 </a> 887 </h3> 888 889 <div class="my-2"> 890 <div><span class="bold">until: </span>3.0.0</div> 891 <div><span class="bold">id: </span>ember-runtime.enumerable-contains</div> 892 </div> 893 <section> 894 <div id="ember774" class="ember-view"><p>The <code>Enumerable#contains</code> and <code>Array#contains</code>
894 methods were deprecated in favor of <code>Enumerable#includes</code> and <code>Array#includes</code> 895to stay in line with ES standards. See <a href="https://github.com/emberjs/rfcs/blob/master/text/0136-contains-to-includes.md">RFC</a> for details.</p> 896<p><code>contains</code> and <code>includes</code> have similar behaviors. A notable exception is how <code>NaN</code> values are handled. 897<code>contains</code> uses <a href="https://tc39.github.io/ecma262/#sec-strict-equality-comparison">Strict equality comparison algorithm</a> 898for testing inclusion while <code>includes</code> uses <a href="https://tc39.github.io/ecma262/#sec-samevaluezero">SameValueZero algorithm</a>.</p> 899<p>Before:</p> 900<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">var</span><span style="color:#E1E4E8"> arr </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> [</span><span style="color:#9ECBFF">'a'</span><span style="color:#E1E4E8">, </span><span style="color:#9ECBFF">'b'</span><span style="color:#E1E4E8">, </span><span style="color:#9ECBFF">'c'</span><span style="color:#E1E4E8">, </span><span style="color:#79B8FF">NaN</span><span style="color:#E1E4E8">, </span><span style="color:#79B8FF">undefined</span><span style="color:#E1E4E8">, </span><span style="color:#79B8FF">null</span><span style="color:#E1E4E8">];</span></span> 901<span class="line"></span> 902<span class="line"><span style="color:#E1E4E8">arr.</span><span style="color:#B392F0">contains</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'b'</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// true</span></span> 903<span class="line"><span style="color:#E1E4E8">arr.</span><span style="color:#B392F0">contains</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'d'</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// false</span></span> 904<span class="line"><span style="color:#E1E4E8">arr.</span><span style="color:#B392F0">contains</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">NaN</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// false</span></span> 905<span class="line"><span style="color:#E1E4E8">arr.</span><span style="color:#B392F0">contains</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">null</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// false</span></span> 906<span class="line"><span style="color:#E1E4E8">arr.</span><span style="color:#B392F0">contains</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">undefined</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// false</span></span></code></pre> 907<p>After:</p> 908<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">var</span><span style="color:#E1E4E8"> arr </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> [</span><span style="color:#9ECBFF">'a'</span><span style="color:#E1E4E8">, </span><span style="color:#9ECBFF">'b'</span><span style="color:#E1E4E8">, </span><span style="color:#9ECBFF">'c'</span><span style="color:#E1E4E8">, </span><span style="color:#79B8FF">NaN</span><span style="color:#E1E4E8">, </span><span style="color:#79B8FF">undefined</span><span style="color:#E1E4E8">, </span><span style="color:#79B8FF">null</span><span style="color:#E1E4E8">];</span></span> 909<span class="line"></span> 910<span class="line"><span style="color:#E1E4E8">arr.</span><span style="color:#B392F0">includes</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'b'</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// true</span></span> 911<span class="line"><span style="color:#E1E4E8">arr.</span><span style="color:#B392F0">includes</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'d'</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">
911// false</span></span> 912<span class="line"><span style="color:#E1E4E8">arr.</span><span style="color:#B392F0">includes</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">NaN</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// true</span></span> 913<span class="line"><span style="color:#E1E4E8">arr.</span><span style="color:#B392F0">includes</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">null</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// true</span></span> 914<span class="line"><span style="color:#E1E4E8">arr.</span><span style="color:#B392F0">includes</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">undefined</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// true</span></span></code></pre> 915<p><code>includes</code> also allows a second optional parameter <code>startAt</code> to specify the index at which to begin searching:</p> 916<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">var</span><span style="color:#E1E4E8"> arr </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> [</span><span style="color:#9ECBFF">'a'</span><span style="color:#E1E4E8">, </span><span style="color:#9ECBFF">'b'</span><span style="color:#E1E4E8">, </span><span style="color:#9ECBFF">'c'</span><span style="color:#E1E4E8">, </span><span style="color:#79B8FF">NaN</span><span style="color:#E1E4E8">];</span></span> 917<span class="line"></span> 918<span class="line"><span style="color:#E1E4E8">arr.</span><span style="color:#B392F0">includes</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'c'</span><span style="color:#E1E4E8">, </span><span style="color:#79B8FF">2</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// true</span></span> 919<span class="line"><span style="color:#E1E4E8">arr.</span><span style="color:#B392F0">includes</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'c'</span><span style="color:#E1E4E8">, </span><span style="color:#F97583">-</span><span style="color:#79B8FF">2</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// true</span></span></code></pre> 920<p>Note that the second <code>startAt</code> parameter is only available for <code>Ember.Array</code> because <code>Ember.Enumerable</code> does not rely on index-ordered access.</p> 921<p><code>Enumerable#without</code> and <code>MutableEnumerable#addObject</code> use now internally <code>includes</code> instead of <code>contains</code>. This leads to some minor breaking changes:</p> 922<p>Before:</p> 923<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">var</span><span style="color:#E1E4E8"> arr </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> [</span><span style="color:#9ECBFF">'a'</span><span style="color:#E1E4E8">, </span><span style="color:#9ECBFF">'b'</span><span style="color:#E1E4E8">];</span></span> 924<span class="line"></span> 925<span class="line"><span style="color:#E1E4E8">arr.</span><span style="color:#B392F0">addObject</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">NaN</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// ['a', 'b', NaN]</span></span> 926<span class="line"><span style="color:#E1E4E8">arr.</span><span style="color:#B392F0">addObject</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">NaN</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// ['a', 'b', NaN, NaN]</span></span> 927<span class="line"><span style="color:#E1E4E8">arr.</span><span style="color:#B392F0">without</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">NaN</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// ['a', 'b', NaN, NaN]</span></span></code></pre> 928<p>After:</p> 929<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">var</span><span style="color:#E1E4E8"> arr </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> [</span><span style="color:#9ECBFF">'a'</span><span style="color:#E1E4E8">, </span><span style="color:#9ECBFF">'b'</span><span style="color:#E1E4E8">];</span></span> 930<span class="line"></span> 931<span class="line"><span style="color:#E1E4E8">arr.</span><span style="color:#B392F0">addObject</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">NaN</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// ['a', 'b', NaN]</span></span> 932<span class="line"><span style="color:#E1E4E8">arr.</span><span style="color:#B392F0">addObject</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">NaN</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// ['a', 'b', NaN]</span></span> 933<span class="line"><span style="color:#E1E4E8">arr.</span><span style="color:#B392F0">without</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">NaN</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// ['a', 'b']</span></span></code></pre> 934<p>Addon authors should use <a href="https://github.com/rwjblue/ember-runtime-enumerable-includes-polyfill">ember-runtime-enumerable-includes-polyfill</a> 935to fix the deprecation in a backwards-compatible way.</p> 936<p>Added in <a href="https://github.com/emberjs/ember.js/pull/13553">PR #13553</a>.</p> 937</div> 938 </section> 939</div> 940 <div class="padding-vertical-small bg-light-muted rounded-sm"> 941 942 <h3 id="toc_use-ember-string-htmlsafe-over-ember-handlebars-safestring"> 943 Use Ember.String.htmlSafe over Ember.Handlebars.SafeString 944 945 <a title="Use Ember.String.htmlSafe over Ember.Handlebars.SafeString" href="/id/use-ember-string-htmlsafe-over-ember-handlebars-safestring" id="ember775" class="ember-view"> 946 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512">
947 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 948 </svg> 949 </a> 950 </h3> 951 952 <div class="my-2"> 953 <div><span class="bold">until: </span>3.0.0</div> 954 <div><span class="bold">id: </span>use-ember-string-htmlsafe-over-ember-handlebars-safestring</div> 955 </div> 956 <section> 957 <div id="ember776" class="ember-view"><p>Creating safe strings. Before:</p> 958<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">import</span><span style="color:#E1E4E8"> Ember </span><span style="color:#F97583">from</span><span style="color:#9ECBFF"> 'ember'</span><span style="color:#E1E4E8">;</span></span> 959<span class="line"><span style="color:#F97583">const</span><span style="color:#E1E4E8"> { </span><span style="color:#79B8FF">computed</span><span style="color:#E1E4E8"> } </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> Ember;</span></span> 960<span class="line"></span> 961<span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Ember.Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 962<span class="line"><span style="color:#E1E4E8"> myString: </span><span style="color:#B392F0">computed</span><span style="color:#E1E4E8">(</span><span style="color:#F97583">function</span><span style="color:#E1E4E8">(){</span></span> 963<span class="line"><span style="color:#F97583"> return</span><span style="color:#F97583"> new</span><span style="color:#E1E4E8"> Ember.Handlebars.</span><span style="color:#B392F0">SafeString</span><span style="color:#E1E4E8">(someString);</span></span> 964<span class="line"><span style="color:#E1E4E8"> });</span></span> 965<span class="line"><span style="color:#E1E4E8">})</span></span></code></pre> 966<p>After:</p> 967<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">import</span><span style="color:#E1E4E8"> Ember </span><span style="color:#F97583">from</span><span style="color:#9ECBFF"> 'ember'</span><span style="color:#E1E4E8">;</span></span> 968<span class="line"><span style="color:#F97583">const</span><span style="color:#E1E4E8"> { </span><span style="color:#79B8FF">computed</span><span style="color:#E1E4E8"> } </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> Ember;</span></span> 969<span class="line"></span> 970<span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Ember.Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 971<span class="line"><span style="color:#E1E4E8"> myString: </span><span style="color:#B392F0">computed</span><span style="color:#E1E4E8">(</span><span style="color:#F97583">function</span><span style="color:#E1E4E8">(){</span></span> 972<span class="line"><span style="color:#F97583"> return</span><span style="color:#E1E4E8"> Ember.String.</span><span style="color:#B392F0">htmlSafe</span><span style="color:#E1E4E8">(someString);</span></span> 973<span class="line"><span style="color:#E1E4E8"> });</span></span> 974<span class="line"><span style="color:#E1E4E8">)};</span></span></code></pre> 975<p>Detecting safe strings. Before:</p> 976<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">
976import</span><span style="color:#E1E4E8"> Ember </span><span style="color:#F97583">from</span><span style="color:#9ECBFF"> 'ember'</span><span style="color:#E1E4E8">;</span></span> 977<span class="line"></span> 978<span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Ember.Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 979<span class="line"><span style="color:#E1E4E8"> actions: {</span></span> 980<span class="line"><span style="color:#B392F0"> save</span><span style="color:#E1E4E8">() {</span></span> 981<span class="line"><span style="color:#F97583"> let</span><span style="color:#E1E4E8"> myString </span><span style="color:#F97583">=</span><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">get</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'myString'</span><span style="color:#E1E4E8">);</span></span> 982<span class="line"><span style="color:#F97583"> if</span><span style="color:#E1E4E8"> (myString </span><span style="color:#F97583">instanceof</span><span style="color:#B392F0"> Ember</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">Handlebars</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">SafeString</span><span style="color:#E1E4E8">) {</span></span> 983<span class="line"><span style="color:#7e8791"> // ...</span></span> 984<span class="line"><span style="color:#E1E4E8"> }</span></span> 985<span class="line"><span style="color:#E1E4E8"> }</span></span> 986<span class="line"><span style="color:#E1E4E8"> }</span></span> 987<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 988<p>After:</p> 989<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">import</span><span style="color:#E1E4E8"> Ember </span><span style="color:#F97583">from</span><span style="color:#9ECBFF"> 'ember'</span><span style="color:#E1E4E8">;</span></span> 990<span class="line"></span> 991<span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Ember.Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 992<span class="line"><span style="color:#E1E4E8"> actions: {</span></span> 993<span class="line"><span style="color:#B392F0"> save</span><span style="color:#E1E4E8">() {</span></span> 994<span class="line"><span style="color:#F97583"> let</span><span style="color:#E1E4E8"> myString </span><span style="color:#F97583">=</span><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">get</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'myString'</span><span style="color:#E1E4E8">);</span></span> 995<span class="line"><span style="color:#F97583"> if</span><span style="color:#E1E4E8"> (Ember.String.</span><span style="color:#B392F0">isHTMLSafe</span><span style="color:#E1E4E8">(myString)) {</span></span> 996<span class="line"><span style="color:#7e8791"> // ...</span></span> 997<span class="line"><span style="color:#E1E4E8"> }</span></span> 998<span class="line"><span style="color:#E1E4E8"> }</span></span> 999<span class="line"><span style="color:#E1E4E8"> }</span></span> 1000<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 1001<p>If you're an addon maintainer, there is a polyfill for safe string detection (<a href="https://github.com/workmanw/ember-string-ishtmlsafe-polyfill">ember-string-ishtmlsafe-polyfill</a>) 1002that will help maintain backwards compatibility. Additionally, it's worth noting that <code>Ember.String.htmlSafe</code> 1003is supported back to pre-1.0, so there should be no concerns of backwards compatibility there.</p> 1004</div> 1005 </section> 1006</div> 1007 <h2 class="anchorable-toc rounded-lg padding-small">Deprecations Added 1008 in 1009 2.11.0 1010 </h2> 1011 <div class="padding-vertical-small bg-light-muted rounded-sm"> 1012 1013 <h3 id="toc_code-rendertoelement-code"> 1014 renderToElement 1015 1016 <a title="renderToElement" href="/id/code-rendertoelement-code" id="ember777" class="ember-view"> 1017 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512">
1018 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 1019 </svg> 1020 </a> 1021 </h3> 1022 1023 <div class="my-2"> 1024 <div><span class="bold">until: </span>2.12.0</div> 1025 <div><span class="bold">id: </span>code-rendertoelement-code</div> 1026 </div> 1027 <section> 1028 <div id="ember778" class="ember-view"><p>Using the <code>renderToElement</code> is deprecated in favor of <code>appendTo</code>. 1029Please refactor to use <code>appendTo</code>:</p> 1030<p>For example, if you had:</p> 1031<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#E1E4E8">component.</span><span style="color:#B392F0">renderToElement</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'div'</span><span style="color:#E1E4E8">);</span></span></code></pre> 1032<p>Would be refactored to:</p> 1033<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">let</span><span style="color:#E1E4E8"> element </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> document.</span><span style="color:#B392F0">createElement</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'div'</span><span style="color:#E1E4E8">);</span></span> 1034<span class="line"><span style="color:#E1E4E8">component.</span><span style="color:#B392F0">appendTo</span><span style="color:#E1E4E8">(element);</span></span></code></pre> 1035<p>Note that both APIs are private, so no public API is being deprecated here.</p> 1036</div> 1037 </section> 1038</div> 1039 <div class="padding-vertical-small bg-light-muted rounded-sm"> 1040 1041 <h3 id="toc_ember-template-compiler-deprecate-render"> 1042 {{render helper 1043 1044 <a title="{{render helper" href="/id/ember-template-compiler-deprecate-render" id="ember779" class="ember-view"> 1045 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 1046 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 1047 </svg> 1048 </a> 1049 </h3> 1050 1051 <div class="my-2"> 1052 <div><span class="bold">until: </span>3.0.0</div> 1053 <div><span class="bold">id: </span>ember-template-compiler.deprecate-render</div> 1054 </div> 1055 <section> 1056 <div id="ember780" class="ember-view"><p>Using the <code>{{render</code>
1056 helper is deprecated in favor of using components. 1057Please refactor uses of this helper to components:</p> 1058<p>For example, if you had:</p> 1059<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-handlebars line-numbers"><span class="line"><span style="color:#79B8FF">{{</span><span style="color:#FFAB70">render</span><span style="color:#9ECBFF"> 'my-sidebar'</span><span style="color:#79B8FF">}}</span></span></code></pre> 1060<div><div class="filename handlebars">app/templates/my-sidebar.hbs</div><pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-handlebars line-numbers"><span class="line"><span style="color:#E1E4E8"><</span><span style="color:#85E89D">p</span><span style="color:#E1E4E8">>template stuff here</</span><span style="color:#85E89D">p</span><span style="color:#E1E4E8">></span></span></code></pre> 1061</div> 1062<div><div class="filename javascript">app/controllers/my-sidebar.js</div><pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Ember.Controller.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 1063<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 1064</div> 1065<p>You would refactor to a component like so:</p> 1066<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-handlebars line-numbers"><span class="line"><span style="color:#79B8FF">{{</span><span style="color:#FFAB70">my-sidebar</span><span style="color:#79B8FF">}}</span></span></code></pre> 1067<div><div class="filename handlebars">app/templates/components/my-sidebar.hbs</div><pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-handlebars line-numbers"><span class="line"><span style="color:#E1E4E8"><</span><span style="color:#85E89D">p</span><span style="color:#E1E4E8">>template stuff here</</span><span style="color:#85E89D">p</span><span style="color:#E1E4E8">></span></span></code></pre> 1068</div> 1069<div><div class="filename handlebars">app/components/my-sidebar.js</div><pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-handlebars line-numbers"><span class="line"><span style="color:#E1E4E8">export default Ember.Component.extend({</span></span> 1070<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 1071</div> 1072<p>Note that the render helper has several unique behaviors that may require further refactoring work during migration to a component.</p> 1073<ul> 1074<li>When using the render helper with no model argument, the controller instance is a singleton. For example the same controller instance is shared between <code>{{render 'post'}}</code>, any other helper usage of <code>{{render 'post'}}</code>, a route template named post, and dependency injections using <code>Ember.inject.service('post')</code>.</li> 1075<li>When sendAction is called in a rendered controller, or when <code>{{action</code> is used in a render helper template, the bubbling target for those actions is the router and current active route. With components, those same actions would target only the component instance without bubbling.</li> 1076</ul> 1077</div> 1078 </section> 1079</div> 1080 <div class="padding-vertical-small bg-light-muted rounded-sm"> 1081 1082 <h3 id="toc_rendering-into-a-render-helper-that-resolves-to-an-outlet"> 1083 Rendering into a {{render}} helper that resolves to an {{outlet}} 1084 1085 <a title="Rendering into a {{render}} helper that resolves to an {{outlet}}" href="/id/rendering-into-a-render-helper-that-resolves-to-an-outlet" id="ember781" class="ember-view"> 1086 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 1087 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 1088 </svg> 1089 </a> 1090 </h3> 1091 1092 <div class="my-2"> 1093 <div><span class="bold">until: </span>3.0.0</div> 1094 <div><span class="bold">id: </span>rendering-into-a-render-helper-that-resolves-to-an-outlet</div> 1095 </div> 1096 <section> 1097 <div id="ember782" class="ember-view"><p>Before named outlets were introduced to Ember the render helper was used to declare slots for <code>this.render</code> in routes. This usage is not common in modern, idiomatic applications and is deprecated. In general, the pattern of named outlets or named render helpers is discouraged. Instead use of <a href="https://github.com/ef4/ember-elsewhere">ember-elsewhere</a> or another DOM-redirection library should better serve these use cases.</p> 1098<p>For example this code uses the render helper as a target for a special sidebar present on the index route. The special sidebar is in a template named <code>index-sidebar</code>:</p> 1099<div><div class="filename handlebars">app/templates/application.hbs</div><pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-handlebars line-numbers"><span class="line"><span style="color:#E1E4E8"><</span><span style="color:#85E89D">div</span><span style="color:#B392F0"> class=</span><span style="color:#9ECBFF">
1099"sidebar"</span><span style="color:#E1E4E8">></span><span style="color:#79B8FF">{{</span><span style="color:#FFAB70">render</span><span style="color:#9ECBFF"> 'sidebar'</span><span style="color:#79B8FF">}}</span><span style="color:#E1E4E8"></</span><span style="color:#85E89D">div</span><span style="color:#E1E4E8">></span></span> 1100<span class="line"><span style="color:#E1E4E8"><</span><span style="color:#85E89D">div</span><span style="color:#B392F0"> class=</span><span style="color:#9ECBFF">"main"</span><span style="color:#E1E4E8">></span><span style="color:#79B8FF">{{</span><span style="color:#FFAB70">outlet</span><span style="color:#79B8FF">}}</span><span style="color:#E1E4E8"></</span><span style="color:#85E89D">div</span><span style="color:#E1E4E8">></span></span></code></pre> 1101</div> 1102<div><div class="filename handlebars">app/templates/index.hbs</div><pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-handlebars line-numbers"><span class="line"><span style="color:#E1E4E8">Index Content</span></span></code></pre> 1103</div> 1104<div><div class="filename javascript">app/routes/index.js</div><pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#E1E4E8">App.IndexRoute </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> Ember.Route.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 1105<span class="line"><span style="color:#B392F0"> renderTemplate</span><span style="color:#E1E4E8">() {</span></span> 1106<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">
1106_super</span><span style="color:#E1E4E8">(</span><span style="color:#F97583">...</span><span style="color:#79B8FF">arguments</span><span style="color:#E1E4E8">);</span></span> 1107<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">render</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'index-sidebar'</span><span style="color:#E1E4E8">, { into: </span><span style="color:#9ECBFF">'sidebar'</span><span style="color:#E1E4E8"> });</span></span> 1108<span class="line"><span style="color:#E1E4E8"> },</span></span> 1109<span class="line"><span style="color:#E1E4E8"> actions: {</span></span> 1110<span class="line"><span style="color:#B392F0"> willTransition</span><span style="color:#E1E4E8">() {</span></span> 1111<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">disconnectOutlet</span><span style="color:#E1E4E8">({</span></span> 1112<span class="line"><span style="color:#E1E4E8"> parentView: </span><span style="color:#9ECBFF">'application'</span><span style="color:#E1E4E8">,</span></span> 1113<span class="line"><span style="color:#E1E4E8"> outlet: </span><span style="color:#9ECBFF">'sidebar'</span></span> 1114<span class="line"><span style="color:#E1E4E8"> });</span></span> 1115<span class="line"><span style="color:#E1E4E8"> }</span></span> 1116<span class="line"><span style="color:#E1E4E8"> }</span></span> 1117<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 1118</div> 1119<p>It should be refactored to use <a href="https://github.com/ef4/ember-elsewhere">ember-elsewhere</a>. The sidebar content must be implemented as a component, in this case named <code>index-sidebar</code>. The logic previously used in the route file can be removed. The refactored example:</p> 1120<div><div class="filename handlebars">app/templates/application.hbs</div><pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-handlebars line-numbers"><span class="line"><span style="color:#E1E4E8"><</span><span style="color:#85E89D">div</span><span style="color:#B392F0"> class=</span><span style="color:#9ECBFF">"sidebar"</span><span style="color:#E1E4E8">></span><span style="color:#79B8FF">{{</span><span style="color:#FFAB70">from-elsewhere</span><span style="color:#FFAB70"> name</span><span style="color:#B392F0">=</span><span style="color:#9ECBFF">'sidebar'</span><span style="color:#79B8FF">}}</span><span style="color:#E1E4E8"></</span><span style="color:#85E89D">div</span><span style="color:#E1E4E8">></span></span> 1121<span class="line"><span style="color:#E1E4E8"><</span><span style="color:#85E89D">div</span><span style="color:#B392F0"> class=</span><span style="color:#9ECBFF">"main"</span><span style="color:#E1E4E8">></span><span style="color:#79B8FF">{{</span><span style="color:#FFAB70">outlet</span><span style="color:#79B8FF">}}</span><span style="color:#E1E4E8"></</span><span style="color:#85E89D">div</span><span style="color:#E1E4E8">></span></span></code></pre> 1122</div> 1123<div><div class="filename handlebars">app/templates/index.hbs</div><pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-handlebars line-numbers"><span class="line"><span style="color:#79B8FF">{{</span><span style="color:#FFAB70">to-elsewhere</span><span style="color:#FFAB70"> named</span><span style="color:#B392F0">=</span><span style="color:#9ECBFF">'sidebar'</span><span style="color:#FFAB70"> send</span><span style="color:#B392F0">=</span><span style="color:#E1E4E8">(</span><span style="color:#FFAB70">component</span><span style="color:#9ECBFF"> 'index-sidebar'</span><span style="color:#E1E4E8">)</span><span style="color:#79B8FF">}}</span></span> 1124<span class="line"><span style="color:#E1E4E8">Index Content</span></span></code></pre> 1125</div> 1126<p>For more informations of how to use <code>ember-elsewhere</code>, please visit the official 1127documentation <a href="https://github.com/ef4/ember-elsewhere#ember-elsewhere">here</a>.</p> 1128</div> 1129 </section> 1130</div> 1131 <h2 class="anchorable-toc rounded-lg padding-small">Deprecations Added 1132 in 1133 2.12.0 1134 </h2> 1135 <div class="padding-vertical-small bg-light-muted rounded-sm"> 1136 1137 <h3 id="toc_arguments-in-component-lifecycle-hooks"> 1138 Arguments in Component Lifecycle Hooks 1139 1140 <a title="Arguments in Component Lifecycle Hooks" href="/id/arguments-in-component-lifecycle-hooks" id="ember783" class="ember-view"> 1141 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512">
1142 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 1143 </svg> 1144 </a> 1145 </h3> 1146 1147 <div class="my-2"> 1148 <div><span class="bold">until: </span>2.13.0</div> 1149 <div><span class="bold">id: </span>arguments-in-component-lifecycle-hooks</div> 1150 </div> 1151 <section> 1152 <div id="ember784" class="ember-view"><p>Previously, it was possible for component lifecycle hooks <code>didInitAttrs</code>, <code>didReceiveAttrs</code>, and <code>didUpdateAttrs</code> to receive arguments. However, this functionality was part of private API. Using the arguments is harmful to component performance, so they will trigger a deprecation. Alternative approaches for all three hooks are below:</p> 1153<h4 id="didinitattrsarguments"><code>didInitAttrs</code> arguments</h4> 1154<p>Since this lifecycle hook is <a href="http://emberjs.com/deprecations/v2.x/#toc_ember-component-didinitattrs">already deprecated</a>, we suggest taking this chance to address two deprecations at the same time.</p> 1155<p>Imagine you have a component that stores a timestamp when it is initialized.</p> 1156<p>Before:</p> 1157<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#E1E4E8">Ember.Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 1158<span class="line"><span style="color:#B392F0"> didInitAttrs</span><span style="color:#E1E4E8">({ </span><span style="color:#FFAB70">attrs</span><span style="color:#E1E4E8"> }) {</span></span> 1159<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">set</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'initialTimestamp'</span><span style="color:#E1E4E8">, attrs.timestamp);</span></span> 1160<span class="line"><span style="color:#E1E4E8"> }</span></span> 1161<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 1162<p>After:</p> 1163<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#E1E4E8">Ember.Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 1164<span class="line"><span style="color:#B392F0"> init</span><span style="color:#E1E4E8">() {</span></span> 1165<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">
1165_super</span><span style="color:#E1E4E8">(</span><span style="color:#F97583">...</span><span style="color:#79B8FF">arguments</span><span style="color:#E1E4E8">);</span></span> 1166<span class="line"></span> 1167<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">set</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'initialTimestamp'</span><span style="color:#E1E4E8">, </span><span style="color:#79B8FF">this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">get</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'timestamp'</span><span style="color:#E1E4E8">));</span></span> 1168<span class="line"><span style="color:#E1E4E8"> }</span></span> 1169<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 1170<h4 id="didreceiveattrsanddidupdateattrsarguments"><code>didReceiveAttrs</code> and <code>didUpdateAttrs</code> arguments</h4> 1171<p>This example for <code>didReceiveAttrs</code> below also applies to <code>didUpdateAttrs</code>, a similar hook that only runs on re-renders. Let's say you want to animate a thermometer widget showing the change between today's high and low temperatures.</p> 1172<p>Before:</p> 1173<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#E1E4E8">Ember.Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 1174<span class="line"><span style="color:#B392F0"> didReceiveAttrs</span><span style="color:#E1E4E8">({ </span><span style="color:#FFAB70">oldAttrs</span><span style="color:#E1E4E8">, </span><span style="color:#FFAB70">newAttrs</span><span style="color:#E1E4E8"> }) {</span></span> 1175<span class="line"><span style="color:#F97583"> if</span><span style="color:#E1E4E8"> (oldAttrs.temp </span><span style="color:#F97583">!==</span><span style="color:#E1E4E8"> newAttrs.temp) {</span></span> 1176<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.thermometer.</span><span style="color:#B392F0">move</span><span style="color:#E1E4E8">({ from: oldAttrs.temp, to: newAttrs.temp });</span></span> 1177<span class="line"><span style="color:#E1E4E8"> }</span></span> 1178<span class="line"><span style="color:#E1E4E8"> }</span></span> 1179<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 1180<p>After:</p> 1181<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#E1E4E8">Ember.Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 1182<span class="line"><span style="color:#B392F0"> didReceiveAttrs</span><span style="color:#E1E4E8">() {</span></span> 1183<span class="line"><span style="color:#F97583"> let</span><span style="color:#E1E4E8"> oldTemp </span><span style="color:#F97583">=</span><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">get</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'_oldTemp'</span><span style="color:#E1E4E8">);</span></span> 1184<span class="line"><span style="color:#F97583"> let</span><span style="color:#E1E4E8"> newTemp </span><span style="color:#F97583">=</span><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">get</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'temp'</span><span style="color:#E1E4E8">);</span></span> 1185<span class="line"></span> 1186<span class="line"><span style="color:#F97583"> if</span><span style="color:#E1E4E8"> (oldTemp </span><span style="color:#F97583">&&</span><span style="color:#E1E4E8"> oldTemp </span><span style="color:#F97583">!==</span><span style="color:#E1E4E8"> newTemp) {</span></span> 1187<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.thermometer.</span><span style="color:#B392F0">move</span><span style="color:#E1E4E8">({ from: oldTemp, to: newTemp });</span></span> 1188<span class="line"><span style="color:#E1E4E8"> }</span></span> 1189<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.</span><span style="color:#B392F0">set</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'_oldTemp'</span><span style="color:#E1E4E8">, newTemp);</span></span> 1190<span class="line"><span style="color:#E1E4E8"> }</span></span> 1191<span class="line"><span style="color:#E1E4E8">});
1191</span></span></code></pre> 1192<p>Additionally, <a href="https://github.com/workmanw/ember-diff-attrs">ember-diff-attrs</a> is an addon that spun out of the discussions on the RFC. It provides a dry way to track attribute changes for this lifecycle hook.</p> 1193</div> 1194 </section> 1195</div> 1196 <div class="padding-vertical-small bg-light-muted rounded-sm"> 1197 1198 <h3 id="toc_code-ember-k-code"> 1199 Ember.K 1200 1201 <a title="Ember.K" href="/id/code-ember-k-code" id="ember785" class="ember-view"> 1202 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 1203 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 1204 </svg> 1205 </a> 1206 </h3> 1207 1208 <div class="my-2"> 1209 <div><span class="bold">until: </span>3.0.0</div> 1210 <div><span class="bold">id: </span>code-ember-k-code</div> 1211 </div> 1212 <section> 1213 <div id="ember786" class="ember-view"><p>Using <code>Ember.K</code> is deprecated in favor of defining a function inline. See <a href="https://github.com/emberjs/rfcs/blob/master/text/0178-deprecate-ember-k.md">RFC #178</a>.</p> 1214<p>You can use the addon <a href="https://github.com/abuiles/ember-watson#remove-usages-of-emberk">ember-watson</a> to automate the removal of <code>Ember.K</code> from your application.</p> 1215<p>Example object:</p> 1216<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#E1E4E8">Ember.Object.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 1217<span class="line"><span style="color:#E1E4E8"> someFun: Ember.</span><span style="color:#79B8FF">K</span></span> 1218<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 1219<p>Command:</p> 1220<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-bash line-numbers"><span class="line"><span style="color:#B392F0">ember</span><span style="color:#9ECBFF"> watson:remove-ember-k</span><span style="color:#79B8FF"> --empty</span></span></code></pre> 1221<p>The result will be:</p> 1222<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#E1E4E8">Ember.Object.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 1223<span class="line"><span style="color:#B392F0"> someFun</span><span style="color:#E1E4E8">() {}</span></span> 1224<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 1225<p>If for some reason your app depends on the ability to chain <code>Ember.K</code> invocations, you can use the flag <code>--return-this</code>. It will replace <code>Ember.K</code> with a function that returns <code>this</code>.</p> 1226</div> 1227 </section> 1228</div> 1229 <div class="padding-vertical-small bg-light-muted rounded-sm"> 1230 1231 <h3 id="toc_migrating-from-_lookupfactory-to-factoryfor"> 1232 Migrating from _lookupFactory to factoryFor 1233 1234 <a title="Migrating from _lookupFactory to factoryFor" href="/id/migrating-from-_lookupfactory-to-factoryfor" id="ember787" class="ember-view"> 1235 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512">
1236 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 1237 </svg> 1238 </a> 1239 </h3> 1240 1241 <div class="my-2"> 1242 <div><span class="bold">until: </span>2.13.0</div> 1243 <div><span class="bold">id: </span>migrating-from-_lookupfactory-to-factoryfor</div> 1244 </div> 1245 <section> 1246 <div id="ember788" class="ember-view"><p>The private API method <code>_lookupFactory</code> is deprecated and replaced by <code>factoryFor</code> in public API. This API will return the original base class registered into or resolved by the container and a <code>create</code> function to generate a dependency-injected instance.</p> 1247<p>Addon creators and maintainers can use <a href="https://github.com/rwjblue/ember-factory-for-polyfill">ember-factory-for-polyfill</a> for addons supporting versions 2.3+, or <a href="https://github.com/rwjblue/ember-getowner-polyfill">ember-getowner-polyfill</a> for 1.10+.</p> 1248<p>Before:</p> 1249<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">(</span></span> 1250<span class="line"><span style="color:#B392F0"> init</span><span style="color:#E1E4E8">() {</span></span> 1251<span class="line"><span style="color:#E1E4E8"> this._super(</span><span style="color:#F97583">...</span><span style="color:#79B8FF">arguments</span><span style="color:#E1E4E8">);</span></span> 1252<span class="line"><span style="color:#E1E4E8"> let Factory </span><span style="color:#F97583">=</span><span style="color:#B392F0"> getOwner</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">this</span><span style="color:#E1E4E8">).</span><span style="color:#B392F0">_lookupFactory</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'logger:main'</span><span style="color:#E1E4E8">);</span></span> 1253<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.logger </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> Factory.</span><span style="color:#B392F0">create</span><span style="color:#E1E4E8">({ level: </span><span style="color:#9ECBFF">'low'</span><span style="color:#E1E4E8"> });</span></span> 1254<span class="line"><span style="color:#E1E4E8"> }</span></span> 1255<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 1256<p>After:</p> 1257<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Component.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">(</span></span> 1258<span class="line"><span style="color:#B392F0"> init</span><span style="color:#E1E4E8">() {</span></span> 1259<span class="line"><span style="color:#E1E4E8"> this._super(</span><span style="color:#F97583">...</span><span style="color:#79B8FF">arguments</span><span style="color:#E1E4E8">);</span></span> 1260<span class="line"><span style="color:#E1E4E8"> let factory </span><span style="color:#F97583">=</span><span style="color:#B392F0">
1260 getOwner</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">this</span><span style="color:#E1E4E8">).</span><span style="color:#B392F0">factoryFor</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'logger:main'</span><span style="color:#E1E4E8">);</span></span> 1261<span class="line"><span style="color:#79B8FF"> this</span><span style="color:#E1E4E8">.logger </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> factory.</span><span style="color:#B392F0">create</span><span style="color:#E1E4E8">({ level: </span><span style="color:#9ECBFF">'low'</span><span style="color:#E1E4E8"> });</span></span> 1262<span class="line"><span style="color:#E1E4E8"> }</span></span> 1263<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 1264<p>Any methods or properties of the factory can be accessed through the <code>class</code> property when using <code>factoryFor</code>.</p> 1265<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">let</span><span style="color:#E1E4E8"> factory </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> owner.</span><span style="color:#B392F0">factoryFor</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'widget:slow'</span><span style="color:#E1E4E8">);</span></span> 1266<span class="line"><span style="color:#F97583">let</span><span style="color:#E1E4E8"> klass </span><span style="color:#F97583">=</span><span style="color:#E1E4E8"> factory.class;</span></span> 1267<span class="line"><span style="color:#E1E4E8">klass.</span><span style="color:#B392F0">hasSpeed</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'slow'</span><span style="color:#E1E4E8">); </span><span style="color:#7e8791">// true</span></span></code></pre> 1268</div> 1269 </section> 1270</div> 1271 <h2 class="anchorable-toc rounded-lg padding-small">Deprecations Added 1272 in 1273 2.13.0 1274 </h2> 1275 <div class="padding-vertical-small bg-light-muted rounded-sm"> 1276 1277 <h3 id="toc_ember-map-ember-mapwithdefault-and-ember-orderedset-are-deprecated"> 1278 Ember.Map, Ember.MapWithDefault, and Ember.OrderedSet are deprecated 1279 1280 <a title="Ember.Map, Ember.MapWithDefault, and Ember.OrderedSet are deprecated" href="/id/ember-map-ember-mapwithdefault-and-ember-orderedset-are-deprecated" id="ember789" class="ember-view"> 1281 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 1282 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 1283 </svg> 1284 </a> 1285 </h3> 1286 1287 <div class="my-2"> 1288 <div><span class="bold">until: </span>2.16.0</div> 1289 <div><span class="bold">id: </span>ember-map-ember-mapwithdefault-and-ember-orderedset-are-deprecated</div> 1290 </div> 1291 <section> 1292 <div id="ember790" class="ember-view"><p>The private classes <code>Ember.Map</code>, <code>Ember.MapWithDefault</code>, and <code>Ember.OrderedSet</code> 1293are being deprecated and will be removed in a later version of Ember.</p> 1294<p>Developers using any of these classes should replace them by a custom 1295implementation.</p> 1296</div> 1297 </section> 1298</div> 1299 <div class="padding-vertical-small bg-light-muted rounded-sm"> 1300 1301 <h3 id="toc_ember-router-router-renamed-to-ember-router-_routermicrolib"> 1302 Ember.Router.router renamed to Ember.Router._routerMicrolib 1303 1304 <a title="Ember.Router.router renamed to Ember.Router._routerMicrolib" href="/id/ember-router-router-renamed-to-ember-router-_routermicrolib" id="ember791" class="ember-view"> 1305 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512">
1306 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 1307 </svg> 1308 </a> 1309 </h3> 1310 1311 <div class="my-2"> 1312 <div><span class="bold">until: </span>2.16.0</div> 1313 <div><span class="bold">id: </span>ember-router-router-renamed-to-ember-router-_routermicrolib</div> 1314 </div> 1315 <section> 1316 <div id="ember792" class="ember-view"><p>The private <code>router</code> property of the <code>Ember.Router</code> instance (commonly found as <code>this.router</code> in <code>Ember.Route</code> instances or via router:main in the container) 1317has been renamed to <code>_routerMicrolib</code> to identify it as <code>router.js</code>, the microlib used within <code>Ember.Router</code>.</p> 1318<p>Addon and application developers that are using the internal <code>router</code> property of <code>Ember.Router</code> should replace those usages with <code>Ember.Router._routerMicrolib</code>.</p> 1319<p>This example demonstrates a common use case for <code>.router</code>.</p> 1320<p>Before:</p> 1321<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Ember.Service.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">({</span></span> 1322<span class="line"><span style="color:#B392F0"> getRouteNameFromUrl</span><span style="color:#E1E4E8"> (</span><span style="color:#FFAB70">url</span><span style="color:#E1E4E8">) {</span></span> 1323<span class="line"><span style="color:#F97583"> const</span><span style="color:#79B8FF"> router</span><span style="color:#F97583"> =</span><span style="color:#B392F0"> getContainer</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">this</span><span style="color:#E1E4E8">).</span><span style="color:#B392F0">lookup</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'router:main'</span><span style="color:#E1E4E8">);</span></span> 1324<span class="line"><span style="color:#F97583"> const</span><span style="color:#79B8FF"> routes</span><span style="color:#F97583"> =</span><span style="color:#E1E4E8"> router.router.recognizer.</span><span style="color:#B392F0">recognize</span><span style="color:#E1E4E8">(url);</span></span> 1325<span class="line"></span> 1326<span class="line"><span style="color:#F97583"> if</span><span style="color:#E1E4E8"> (routes </span><span style="color:#F97583">&&</span><span style="color:#E1E4E8"> routes.</span><span style="color:#79B8FF">length</span><span style="color:#E1E4E8">) {</span></span> 1327<span class="line"><span style="color:#F97583"> return</span><span style="color:#E1E4E8"> routes[routes.</span><span style="color:#79B8FF">length</span><span style="color:#F97583">-</span><span style="color:#79B8FF">1</span><span style="color:#E1E4E8">].handler;</span></span> 1328<span class="line"><span style="color:#E1E4E8"> }</span></span> 1329<span class="line"><span style="color:#E1E4E8"> }</span></span> 1330<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 1331<p>After:</p> 1332<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Ember.Service.</span><span style="color:#B392F0">extend</span><span style="color:#E1E4E8">
1332({</span></span> 1333<span class="line"><span style="color:#B392F0"> getRouteNameFromUrl</span><span style="color:#E1E4E8"> (</span><span style="color:#FFAB70">url</span><span style="color:#E1E4E8">) {</span></span> 1334<span class="line"><span style="color:#F97583"> const</span><span style="color:#79B8FF"> router</span><span style="color:#F97583"> =</span><span style="color:#B392F0"> getContainer</span><span style="color:#E1E4E8">(</span><span style="color:#79B8FF">this</span><span style="color:#E1E4E8">).</span><span style="color:#B392F0">lookup</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'router:main'</span><span style="color:#E1E4E8">);</span></span> 1335<span class="line"><span style="color:#F97583"> const</span><span style="color:#79B8FF"> routes</span><span style="color:#F97583"> =</span><span style="color:#E1E4E8"> router._routerMicrolib.recognizer.</span><span style="color:#B392F0">recognize</span><span style="color:#E1E4E8">(url);</span></span> 1336<span class="line"></span> 1337<span class="line"><span style="color:#F97583"> if</span><span style="color:#E1E4E8"> (routes </span><span style="color:#F97583">&&</span><span style="color:#E1E4E8"> routes.</span><span style="color:#79B8FF">length</span><span style="color:#E1E4E8">) {</span></span> 1338<span class="line"><span style="color:#F97583"> return</span><span style="color:#E1E4E8"> routes[routes.</span><span style="color:#79B8FF">length</span><span style="color:#F97583">-</span><span style="color:#79B8FF">1</span><span style="color:#E1E4E8">].handler;</span></span> 1339<span class="line"><span style="color:#E1E4E8"> }</span></span> 1340<span class="line"><span style="color:#E1E4E8"> }</span></span> 1341<span class="line"><span style="color:#E1E4E8">});</span></span></code></pre> 1342</div> 1343 </section> 1344</div> 1345 <h2 class="anchorable-toc rounded-lg padding-small">Deprecations Added 1346 in 1347 2.14.0 1348 </h2> 1349 <div class="padding-vertical-small bg-light-muted rounded-sm"> 1350 1351 <h3 id="toc_custom-eventmanager-deprecated"> 1352 Custom eventManager deprecated 1353 1354 <a title="Custom eventManager deprecated" href="/id/custom-eventmanager-deprecated" id="ember793" class="ember-view"> 1355 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 1356 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 1357 </svg> 1358 </a> 1359 </h3> 1360 1361 <div class="my-2"> 1362 <div><span class="bold">until: </span>2.17.0</div> 1363 <div><span class="bold">id: </span>custom-eventmanager-deprecated</div> 1364 </div> 1365 <section> 1366 <div id="ember794" class="ember-view"><p><code>EventDispatcher</code> has long supported custom <code>eventManager</code>s containing their own 1367event dispatching rules to be defined on components. This feature was initially 1368added to allow components to differentiate between certain types of touch input, 1369however the <a href="https://github.com/emberjs-addons/ember-touch/">addon</a> that originally 1370used this has long been deprecated.</p> 1371<p>If needed, an addon which allows for custom component <code>eventManager</code>s can be 1372created. Please comment on the <a href="https://github.com/emberjs/rfcs/pull/194">original RFC</a> 1373if you have a need for this in your app.</p> 1374</div> 1375 </section> 1376</div> 1377 <div class="padding-vertical-small bg-light-muted rounded-sm"> 1378 1379 <h3 id="toc_ember-model_factory_injections-removed"> 1380 Ember.MODEL<em>FACTORY</em>INJECTIONS removed 1381 1382 <a title="Ember.MODEL_FACTORY_INJECTIONS removed" href="/id/ember-model_factory_injections-removed" id="ember795" class="ember-view"> 1383 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512">
1384 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 1385 </svg> 1386 </a> 1387 </h3> 1388 1389 <div class="my-2"> 1390 <div><span class="bold">until: </span>2.17.0</div> 1391 <div><span class="bold">id: </span>ember-model_factory_injections-removed</div> 1392 </div> 1393 <section> 1394 <div id="ember796" class="ember-view"><p>The flag <code>Ember.MODEL_FACTORY_INJECTIONS</code> is no longer required, and can be 1395safely removed from your ember >= 2.13 application.</p> 1396<p>This flag was <a href="https://github.com/emberjs/ember.js/commit/ffd9314620005c16e6cc05589a9e8b7ffc1da090">added in 2013</a> for Ember Data compatibility with the Dependency Injection (DI) system. 1397At the time, Ember's DI blurred the idea of a factory and a class which caused several issues, 1398including one that resulted in this flag being required.</p> 1399<p>Since then, both Ember and Ember Data have addressed the various issues which lead to this flag. 1400Most recently, Ember's DI system introduced the <code>factoryFor</code> API which separates factores and classes. 1401With this step, the flag in question no longer has any affect, and can be safely removed.</p> 1402</div> 1403 </section> 1404</div> 1405 <h2 class="anchorable-toc rounded-lg padding-small">Deprecations Added 1406 in 1407 2.16.0 1408 </h2> 1409 <div class="padding-vertical-small bg-light-muted rounded-sm"> 1410 1411 <h3 id="toc_controller-content-alias"> 1412 Controller#content alias 1413 1414 <a title="Controller#content alias" href="/id/controller-content-alias" id="ember797" class="ember-view"> 1415 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 1416 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 1417 </svg> 1418 </a> 1419 </h3> 1420 1421 <div class="my-2"> 1422 <div><span class="bold">until: </span>2.17.0</div> 1423 <div><span class="bold">id: </span>controller-content-alias</div> 1424 </div> 1425 <section> 1426 <div id="ember798" class="ember-view"><p>For historical reasons, <code>Controller</code>s have a private property named <code>content</code> that 1427aliases the <code>model</code> property.</p> 1428<p>With the introduction of this deprecation, if you wish to continue using <code>content</code> 1429in the controller without a deprecation warning, you will have to add an 1430explicit alias:</p> 1431<pre class="shiki github-dark" style="background-color:#1c1e24;color:#e1e4e8" tabindex="0"><code class="language-javascript line-numbers"><span class="line"><span style="color:#F97583">
1431import</span><span style="color:#E1E4E8"> Controller </span><span style="color:#F97583">from</span><span style="color:#9ECBFF"> '@ember/controller'</span><span style="color:#E1E4E8">;</span></span> 1432<span class="line"><span style="color:#F97583">import</span><span style="color:#E1E4E8"> { alias } </span><span style="color:#F97583">from</span><span style="color:#9ECBFF"> '@ember/object/computed'</span><span style="color:#E1E4E8">;</span></span> 1433<span class="line"></span> 1434<span class="line"><span style="color:#F97583">export</span><span style="color:#F97583"> default</span><span style="color:#E1E4E8"> Controller {</span></span> 1435<span class="line"><span style="color:#E1E4E8"> content: </span><span style="color:#B392F0">alias</span><span style="color:#E1E4E8">(</span><span style="color:#9ECBFF">'model'</span><span style="color:#E1E4E8">)</span></span> 1436<span class="line"><span style="color:#E1E4E8">}</span></span></code></pre> 1437</div> 1438 </section> 1439</div> 1440 <div class="padding-vertical-small bg-light-muted rounded-sm"> 1441 1442 <h3 id="toc_ember-2-legacy"> 1443 Ember 2 Legacy 1444 1445 <a title="Ember 2 Legacy" href="/id/ember-2-legacy" id="ember799" class="ember-view"> 1446 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 1447 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 1448 </svg> 1449 </a> 1450 </h3> 1451 1452 <div class="my-2"> 1453 <div><span class="bold">until: </span>3.4.0</div> 1454 <div><span class="bold">id: </span>ember-2-legacy</div> 1455 </div> 1456 <section> 1457 <div id="ember800" class="ember-view"><p>Ember provides <a href="https://github.com/emberjs/ember-2-legacy">ember-2-legacy</a> which is an addon to help 1458app with deprecations during the transition from the 2.x series to 3.x. This addon provides app owners more 1459time to upgrade off of the deprecations slated for removal in 3.0.0 and depcouples that work from 1460upgrading to the 3.x series.</p> 1461<p>This addon will be supported until 3.4 at which point it will be deprecated.</p> 1462<p>Once you have removed all deprecations, you can remove the addon with the command: 1463<code>npm uninstall ember-2-legacy</code></p> 1464</div> 1465 </section> 1466</div> 1467 <h2 class="anchorable-toc rounded-lg padding-small">Deprecations Added 1468 in 1469 2.18.0 1470 </h2> 1471 <div class="padding-vertical-small bg-light-muted rounded-sm"> 1472 1473 <h3 id="toc_code-targetobject-code"> 1474 targetObject 1475 1476 <a title="targetObject" href="/id/code-targetobject-code" id="ember801" class="ember-view"> 1477 <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"> 1478 <path d="M326.61 185.4c59.75 59.8 58.93 155.69.36 214.58-.1.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.7 59.26-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.1-37.1c9.85-9.85 26.8-3.3 27.3 10.6a184.27 184.27 0 0 0 9.7 52.72 16.1 16.1 0 0 1-3.8 16.61l-13.08 13.1c-28.02 28.02-28.9 73.65-1.15 101.95 28.02 28.58 74.08 28.75 102.32.51l67.2-67.19a71.98 71.98 0 0 0-10.34-110.4 16.04 16.04 0 0 1-6.95-12.6 39.83 39.83 0 0 1 11.7-29.81l21.06-21.06a16.06 16.06 0 0 1 20.58-1.73 152.48 152.48 0 0 1 20.52 17.2zM467.55 44.44c-59.26-59.26-155.7-59.27-214.96 0l-67.2 67.2-.36.37c-58.57 58.9-59.39 154.78.36 214.59a152.45 152.45 0 0 0 20.52 17.2 16.07 16.07 0 0 0 20.58-1.74l21.06-21.05a39.83 39.83 0 0 0 11.7-29.8 16.04 16.04 0 0 0-6.95-12.61 71.98 71.98 0 0 1-10.34-110.4l67.2-67.2c28.23-28.23 74.3-28.06 102.32.52 27.75 28.3 26.87 73.93-1.15 101.96l-13.1 13.09a16.1 16.1 0 0 0-3.77 16.6c5.86 17.2 9.04 35 9.69 52.73.5 13.9 17.45 20.44 27.29 10.6l37.1-37.1c59.28-59.26 59.28-155.7 0-214.96z"></path> 1479 </svg> 1480 </a> 1481 </h3> 1482 1483 <div class="my-2"> 1484 <div><span class="bold">until: </span>3.5.0</div> 1485 <div><span class="bold">id: </span>code-targetobject-code</div> 1486 </div> 1487 <section> 1488 <div id="ember802" class="ember-view"><p>The <code>targetObject</code> property on <code>Component</code> was intended as a "write-only API", meaning that the user was supposed to define their own if they desired, but not read the default one. It was never intended for <code>this.get('targetObject')</code> to be used, so it is now deprecated. The recommendation is to use <code>target</code> instead.</p> 1489</div> 1490 </section> 1491</div> 1492</div> 1493</div> 1494 </div> 1495</main> 1496 1497<footer class="es-footer"> 1498 <div class="footer-info container"> 1499 <div class="footer-info-links"> 1500 1501 <img src="/images/ember-logo.svg" height="40px" width="83px" alt role="presentation" class="footer-logo"> 1502 1503 <div class="spacer"></div> 1504 1505 <a href="https://emberjs.com/team" class="info-link">Team</a> 1506 <a href="https://emberjs.com/sponsors" class="info-link">Sponsors</a> 1507 <a href="https://emberjs.com/security" class="info-link">Security</a> 1508 <a href="https://emberjs.com/about/legal" class="info-link">Legal</a> 1509 <a href="https://emberjs.com/logos" class="info-link">Branding</a> 1510 <a href="https://emberjs.com/guidelines" class="info-link">Community Guidelines</a> 1511 </div> 1512 <div class="footer-social hide-on-mobile"> 1513 <a href="http://twitter.com/emberjs" title="Twitter" aria-label="Official Ember Twitter Account" rel="me"> 1514 <svg class="undefined"xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000"><path d="M939.5 227.941q-37 54-90 93v23q0 73-21 145t-64 139q-43 67-103 117t-144 82q-84 32-181 30-151 0-276-81 19 2 43 2 126 0 224-77-59-1-105-36t-64-89q19 3 34 3 24 0 48-6-63-13-104-62t
1514-41-115v-2q38 21 82 23-37-25-59-64t-22-86q0-49 25-91 68 83 164 133t208 55q-5-21-5-41 0-75 53-127t127-53q79 0 132 57 61-12 115-44-21 64-80 100 52-6 104-28z"/></svg> Twitter 1515 </a> 1516 <a href="https://github.com/emberjs/ember.js" title="GitHub" aria-label="Ember.js github repository" rel="me"> 1517 <svg class="undefined"xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000"><path d="M392 643q0 22-7 45t-24 43q-17 20-40 19t-41-19q-18-18-24-43t-7-45q-1-20 7-46t24-43q16-17 41-19t40 19q15 21 24 43t7 46zm357 0q0 22-7 45t-24 43q-17 20-40 19t-41-19q-18-18-24-43t-7-45q-1-20 7-46t24-43q16-17 41-19t40 19q15 21 24 43t7 46zm90 0q0-67-39-114t-104-47q-23 0-109 12-40 6-88 6t-87-6q-85-12-109-12-66 0-104 47t-39 114q0 49 18 85t45 58q27 22 68 33t78 17q37 6 83 4h94q46 0 83-4t78-17q41-13 69-33t45-58q17-38 18-85zm125-99q0 116-34 185-22 43-59 74t-79 48q-42 17-95 27t-96 12q-43 2-93 3-43 0-79-2t-82-7q-46-5-85-17t-77-29q-38-17-67-45t-48-64q-35-69-35-185 0-132 76-221-15-45-15-95 0-64 28-121 61 0 106 22t106 69q82-20 172-20 83 0 157 18 58-46 104-67t105-22q29 57 29 121 0 49-15 94 76 89 76 222z"/></svg> GitHub 1518 </a> 1519 <a href="https://discordapp.com/invite/zT3asNS" title="Discord" aria-label="Join the Ember Community Discord" rel="me"> 1520 <svg class="undefined"xmlns="http://www.w3.org/2000/svg" viewBox="0 0 245 240"><path d="M104.4 103.9c-5.7 0-10.2 5-10.2 11.1s4.6 11.1 10.2 11.1c5.7 0 10.2-5 10.2-11.1.1-6.1-4.5-11.1-10.2-11.1zm36.5 0c-5.7 0-10.2 5-10.2 11.1s4.6 11.1 10.2 11.1c5.7 0 10.2-5 10.2-11.1s-4.5-11.1-10.2-11.1z"/><path class="st0" d="M189.5 20h-134C44.2 20 35 29.2 35 40.6v135.2c0 11.4 9.2 20.6 20.5 20.6h113.4l-5.3-18.5 12.8 11.9 12.1 11.2 21.5 19V40.6c0-11.4-9.2-20.6-20.5-20.6zm-38.6 130.6s-3.6-4.3-6.6-8.1c13.1-3.7 18.1-11.9 18.1-11.9-4.1 2.7-8 4.6-11.5 5.9-5 2.1-9.8 3.5-14.5 4.3-9.6 1.8-18.4 1.3-25.9-.1-5.7-1.1-10.6-2.7-14.7-4.3-2.3-.9-4.8-2-7.3-3.4-.3-.2-.6-.3-.9-.5-.2-.1-.3-.2-.4-.3-1.8-1-2.8-1.7-2.8-1.7s4.8 8 17.5 11.8c-3 3.8-6.7 8.3-6.7 8.3-22.1-.7-30.5-15.2-30.5-15.2 0-32.2 14.4-58.3 14.4-58.3 14.4-10.8 28.1-10.5 28.1-10.5l1 1.2c-18 5.2-26.3 13.1-26.3 13.1s2.2-1.2 5.9-2.9c10.7-4.7 19.2-6 22.7-6.3.6-.1 1.1-.2 1.7-.2 6.1-.8 13-1 20.2-.2 9.5 1.1 19.7 3.9 30.1 9.6 0 0-7.9-7.5-24.9-12.7l1.4-1.6s13.7-.3 28.1 10.5c0 0 14.4 26.1 14.4 58.3 0 0-8.5 14.5-30.6 15.2z"/></svg> Discord 1521 </a> 1522 <a href="https://hachyderm.io/@emberjs" title="Mastodon" aria-label="Official Ember Mastodon Account" rel="me"> 1523 <svg class="undefined"xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-mastodon" viewBox="0 0 16 16"> 1524 <path d="M11.19 12.195c2.016-.24 3.77-1.475 3.99-2.603.348-1.778.32-4.339.32-4.339 0-3.47-2.286-4.488-2.286-4.488C12.062.238 10.083.017 8.027 0h-.05C5.92.017 3.942.238 2.79.765c0 0-2.285 1.017-2.285 4.488l-.002.662c-.004.64-.007 1.35.011 2.091.083 3.394.626 6.74 3.78 7.57 1.454.383 2.703.463 3.709.408 1.823-.1 2.847-.647 2.847-.647l-.06-1.317s-1.303.41-2.767.36c-1.45-.05-2.98-.156-3.215-1.928a3.614 3.614 0 0 1-.033-.496s1.424.346 3.228.428c1.103.05 2.137-.064 3.188-.189zm1.613-2.47H11.13v-4.08c0-.859-.364-1.295-1.091-1.295-.804 0-1.207.517-1.207 1.541v2.233H7.168V5.89c0-1.024-.403-1.541-1.207-1.541-.727 0-1.091.436-1.091 1.296v4.079H3.197V5.522c0-.859.22-1.541.66-2.046.456-.505 1.052-.764 1.793-.764.856 0 1.504.328 1.933.983L8 4.39l.417-.695c.429-.655 1.077-.983 1.934-.983.74 0 1.336.259 1.791.764.442.505.661 1.187.661 2.046v4.203z"/> 1525</svg> Mastodon 1526 </a> 1527 </div> 1528</div> 1529 1530 <div class="footer-help"> 1531 <p class="container py-1"> 1532 1533If you want help you can contact us by <a href="mailto:[email protected]?subject=Help">email</a>, 1534open an <a href="https://github.com/ember-learn/ember-website/issues/new"> issue</a>, 1535or get realtime help by joining the <a href="https://discord.gg/emberjs">Ember Discord</a>. 1536 1537 </p> 1538</div> 1539 <div class="footer-statement"> 1540 <p class="footer-copyright container py-1"> 1541 © Copyright 2026 - <a href="https://www.tilde.io/" class="footer-copyright">Tilde Inc.</a> 1542 <br> 1543 Ember.js is free, open source and always will be. 1544<!----> </p> 1545</div> 1546 1547 <hr class="footer-spacer container py-0 my-3"> 1548 1549 <div class="footer-contributions-wrapper container pt-0 pb-3"> 1550 <div class="footer-contributions"> 1551 <span>Ember is generously supported by</span> 1552 <div class="sponsor-icons"> 1553 <a href="https://www.netlify.com/" title="Netlify" aria-label="Netlify" class="mr-2"> 1554 <svg class="footer-contributor-logo"xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewB
1554ox="0 0 147 40"> 1555 <radialGradient id="a" cy="0%" r="100.11%" gradientTransform="matrix(0 .9989 -1.152 0 .5 -.5)"> 1556 <stop offset="0" stop-color="#20c6b7"/> 1557 <stop offset="1" stop-color="#4d9abf"/> 1558 </radialGradient> 1559 <g fill="none" fill-rule="evenodd"> 1560 <path fill="#0e1e25" d="m53.37 12.978.123 2.198c1.403-1.7 3.245-2.55 5.525-2.55 3.951 0 5.962 2.268 6.032 6.804v12.568h-4.26v-12.322c0-1.207-.26-2.1-.78-2.681-.52-.58-1.371-.87-2.552-.87-1.719 0-3 .78-3.84 2.338v13.535h-4.262v-19.02h4.016zm24.378 19.372c-2.7 0-4.89-.852-6.567-2.557-1.678-1.705-2.517-3.976-2.517-6.812v-.527c0-1.898.365-3.595 1.096-5.089.73-1.494 1.757-2.657 3.078-3.49 1.321-.831 2.794-1.247 4.42-1.247 2.583 0 4.58.826 5.988 2.478 1.41 1.653 2.114 3.99 2.114 7.014v1.723h-12.4c.13 1.57.652 2.812 1.57 3.726s2.073 1.371 3.464 1.371c1.952 0 3.542-.79 4.77-2.373l2.297 2.198c-.76 1.136-1.774 2.018-3.042 2.645-1.269.627-2.692.94-4.27.94zm-.508-16.294c-1.17 0-2.113.41-2.832 1.23-.72.82-1.178 1.963-1.377 3.428h8.12v-.317c-.094-1.43-.474-2.51-1.14-3.243-.667-.732-1.59-1.098-2.771-1.098zm16.765-7.7v4.623h3.35v3.164h-3.35v10.617c0 .726.144 1.25.43 1.573.286.322.798.483 1.535.483a6.55 6.55 0 0 0 1.49-.176v3.305c-.97.27-1.905.404-2.806.404-3.273 0-4.91-1.81-4.91-5.431v-10.776h-3.124v-3.164h3.122v-4.623h4.261zm11.137 23.643h-4.262v-27h4.262zm9.172 0h-4.262v-19.02h4.262zm-4.525-23.96c0-.655.207-1.2.622-1.634.416-.433 1.009-.65 1.78-.65.772 0 1.368.217 1.79.65.42.434.63.979.63 1.635 0 .644-.21 1.18-.63 1.608-.422.428-1.018.642-1.79.642-.771 0-1.364-.214-1.78-.642-.415-.427-.622-.964-.622-1.608zm10.663 23.96v-15.857h-2.894v-3.164h2.894v-1.74c0-2.11.584-3.738 1.753-4.887 1.17-1.148 2.806-1.722 4.91-1.722.749 0 1.544.105 2.386.316l-.105 3.34a8.375 8.375 0 0 0 -1.631-.14c-2.035 0-3.052 1.048-3.052 3.146v1.687h3.858v3.164h-3.858v15.856h-4.261zm17.87-6.117 3.858-12.903h4.542l-7.54 21.903c-1.158 3.199-3.122 4.799-5.893 4.799-.62 0-1.304-.106-2.052-.317v-3.305l.807.053c1.075 0 1.885-.196 2.429-.589.543-.392.973-1.051 1.289-1.977l.613-1.635-6.664-18.932h4.595z"/> 1561 <path fill="url(#a)" fill-rule="nonzero" d="m28.589 14.135-.014-.006c-.008-.003-.016-.006-.023-.013a.11.11 0 0 1 -.028-.093l.773-4.726 3.625 3.626-3.77 1.604a.083.083 0 0 1 -.033.006h-.015c-.005-.003-.01-.007-.02-.017a1.716 1.716 0 0 0 -.495-.381zm5.258-.288 3.876 3.876c.805.806 1.208 1.208 1.355 1.674.022.069.04.138.054.209l-9.263-3.923a.728.728 0 0 0 -.015-.006c-.037-.015-.08-.032-.08-.07s.044-.056.081-.071l.012-.005zm5.127 7.003c-.2.376-.59.766-1.25 1.427l-4.37 4.369-5.652-1.177-.03-.006c-.05-.008-.103-.017-.103-.062a1.706 1.706 0 0 0 -.655-1.193c-.023-.023-.017-.059-.01-.092 0-.005 0-.01.002-.014l1.063-6.526.004-.022c.006-.05.015-.108.06-.108a1.73 1.73 0 0 0 1.16-.665c.009-.01.015-.021.027-.027.032-.015.07 0 .103.014l9.65 4.082zm-6.625 6.801-7.186 7.186 1.23-7.56.002-.01c.001-.01.003-.02.006-.029.01-.024.036-.034.061-.044l.012-.005a1.85 1.85 0 0 0 .695-.517c.024-.028.053-.055.09-.06a.09.09 0 0 1 .029 0l5.06 1.04zm-8.707 8.707-.81.81-8.955-12.942a.424.424 0 0 0 -.01-.014c-.014-.019-.029-.038-.026-.06 0-.016.011-.03.022-.042l.01-.013c.027-.04.05-.08.075-.123l.02-.035.003-.003c.014-.024.027-.047.051-.06.021-.01.05-.006.073-.001l9.921 2.046a.164.164 0 0 1 .076.033c.013.013.016.027.019.043a1.757 1.757 0 0 0 1.028 1.175c.028.014.016.045.003.078a.238.238 0 0 0 -.015.045c-.125.76-1.197 7.298-1.485 9.063zm-1.692 1.691c-.597.591-.949.904-1.347 1.03a2 2 0 0 1 -1.206 0c-.466-.148-.869-.55-1.674-1.356l-8.993-8.993 2.349-3.643c.011-.018.022-.034.04-.047.025-.018.061-.01.091 0a2.434 2.434 0 0 0 1.638-.083c.027-.01.054-.017.075.002a.19.19 0 0 1 .028.032l8.999 13.059zm-14.087-10.186-2.063-2.063 4.074-1.738a.084.084 0 0 1 .033-.007c.034 0 .054.034.072.065a2.91 2.91 0 0 0 .13.184l.013.016c.012.017.004.034-.008.05l-2.25 3.493zm-2.976-2.976-2.61-2.61c-.444-.444-.766-.766-.99-1.043l7.936 1.646a.84.84 0 0 0 .03.005c.049.008.103.017.103.063 0 .05-.059.073-.109.092l-.023.01zm-4.056-4.995a2 2 0 0 1 .09-.495c.148-.466.55-.868 1.356-1.674l3.34-3.34a2175.525 2175.525 0 0 0 4.626 6.687c.027.036.057.076.026.106-.146.161-.292.337-.395.528a.16.16 0 0 1 -.05.062c-.013.008-.027.005-.042.002h-.002l-8.949-1.877zm5.68-6.403 4.489-4.491c.423.185 1.96.834 3.333 1.414 1.04.44 1.988.84 2.286.97.03.012.057.024.07.054.008.018.004.041 0 .06a2.003 2.003 0 0 0 .523 1.828c.03.03 0 .073-.026.11l-.014.021-4.56 7.063c-.012.02-.023.037-.043.05-.024.015-.058.008-.086.001a2.274 2.274 0 0 0 -.543-.074c-.164 0-.342.03-.522.063h-.001c-.02.003-.038.007-.054-.005a.21.21 0 0 1 -.045-.051l-4.808-7.013zm5.398-5.398 5.814-5.814c.805-.805 1.208-1.208 1.674-1.355a2 2 0 0 1 1.206 0c.466.147.869.55 1.674 1.355l1.26 1.26-4.135 6.404a.155.155 0 0 1 -.041.048c-.025.017-.06.01-.09 0a2.097 2.097 0 0 0 -1.92.37c-.027.028-.067.012-.101-.003-.54-.235-4.74-2.01-5.341-2.265zm12.506-3.676 3.818 3.818-.92 5.698v.015a.135.135 0 0 1 -.008.038c-.01.02-.03.024-.05.03a1.83 1.83 0 0 0 -.548.273.154.154 0 0 0 -.02.017c-.011.012-.022.023-.04.025a.114.114 0 0 1 -.043-.007l-5.818-2.472-.011-.005c-.037-.015-.081-.033-.081-.071a2.198 2.198 0 0 0 -.31-.915c-.028-.046-.059-.094-.035-.141zm-3.932 8.606 5.454 2.31c.03.014.063.027.076.058a.106.106 0 0 1 0 .057c-.016.08-.03.171-.03.263v.153c0 .038-.039.054-.075.069l-.011.004c-.864.369-12.13 5.173-12.147 5.173s-.035 0-.052-.017c-.03-.03 0-.072.027-.11a.76.76 0 0 0 .014-.02l4.482-6.94.008-.012c.026-.042.056-.089.104-.089l.045.007c.102.014.192.027.283.027.68 0 1.31-.331 1.69-.897a.16.16 0 0 1 .034-.04c.027-.02.067-.01.098.004zm-6.246 9.185 12.28-5.237s.018 0 .035.017c.067.067.124.112.179.154l.027.017c.025.014.05.03.052.056 0 .01 0 .016-.002.025l-1.052 6.462-.004.026c-.007.05-.014.107-.061.107a1.729 1.729 0 0 0 -1.373.847l-.005.008c-.014.023-.027.045-.05.057-.021.01-.048.006-.07.001l-9.793-2.02c-.01-.002-.152-.519-.163-.52z" transform="translate(-.702)"/> 1562 </g> 1563</svg> 1564 </a> 1565 <a href="https://www.heroku.com/" title="Heroku" aria-label="Heroku" class="mr-2"> 1566 <svg class="footer-contributor-logo"xmlns="http://www.w3.org/2000/svg" width="268" height="80" viewBox="0 0 268 80"> 1567 <path fill="#430098" fill-rule="evenodd" d="M64.8,0 C68.776,0 72,3.224 72,7.2 L72,7.2 L72,72.8 C72,76.776 68.776,80 64.8,80 L64.8,80 L7.2,80 C3.224,80 0,76.776 0,72.8 L0,72.8 L0,7.2 C0,3.224 3.224,0 7.2,0 L7.2,0 Z M64.8,4 L7.2,4 C5.436,4 4,5.435 4,7.2 L4,7.2 L4,72.8 C4,74.564 5.436,76 7.2,76 L7.2,76 L64.8,76 C66.565,76 68,74.564 68,72.8 L68,72.8 L68,7.2 C68,5.435 66.565,4 64.8,4 L64.8,4 Z M19,52 L28,60 L19,68 L19,52 Z M27,12 L27,34.711 C30.994,33.411 36.577,32 42,32 C46.945,32 49.905,33.944 51.517,35.575 C54.814625,38.91 54.995191,43.1202378 55.0003112,43.9159307 L55.0002258,68 L47,68 L47,44.11 C46.961,42.243 46.062,40 42,40 C34.230209,40 25.5570898,43.7328438 24.7166549,44.1028638 L24.651,44.132 L19,46.692 L19,12 L27,12 Z M191.995,25 C198.5525,25 205.37,29.165 205.37,39.15 C205.37,49.135 198.5525,53.3 191.995,53.3 C185.3975,53.2975 178.5825,49.135 178.5825,39.15 C178.5825,29.1675 185.3975,25 191.995,25 Z M251.99,25.5175 L251.99,41.805 C251.99,45.5625 253.205,47.2575 256.155,47.2575 C259.1025,47.2575 260.28,45.5625 260.28,41.805 L260.28,25.5175 L267.5,25.5175 L267.5,41.84 C267.5,49.0625 264.037
15675,53.1875 256.0775,53.1875 C248.1175,53.1875 244.62,49.0625 244.62,41.84 L244.62,25.5175 L251.99,25.5175 Z M220.94,25.5175 L220.94,35.3925 L228.4575,25.5175 L237.005,25.5175 L227.83,36.2775 L237.815,52.785 L229.4875,52.785 L223.04,41.8775 L220.94,44.31 L220.94,52.785 L213.57,52.785 L213.57,25.5175 L220.94,25.5175 Z M140.25,25.5175 L140.25,31.635 L128.165,31.635 L128.165,36.0575 L136.7875,36.0575 L136.7875,41.805 L128.165,41.805 L128.165,46.8525 L140.8775,46.8525 L140.8775,52.785 L120.7975,52.785 L120.7975,25.5175 L140.25,25.5175 Z M159.6175,25.5175 C166.6175,25.5175 170.8925,27.84 170.8925,34.3975 C170.8925,38.67 169.0875,41.1425 165.5125,42.355 L171.2975,52.7825 L163.4875,52.7825 L158.2175,43.315 L156.19,43.315 L156.19,52.7825 L148.9675,52.7825 L148.9675,25.5175 L159.6175,25.5175 Z M94.87,25.5175 L94.87,35.65 L103.935,35.65 L103.935,25.5175 L111.305,25.5175 L111.305,52.7825 L103.935,52.7825 L103.935,41.765 L94.87,41.765 L94.87,52.7825 L87.5,52.7825 L87.5,25.5175 L94.87,25.5175 Z M191.9925,31.0825 C188.1225,31.0825 185.95,34.14 185.95,39.15 C185.95,44.1625 188.125,47.405 191.9925,47.405 C195.825,47.4025 197.9975,44.1625 197.9975,39.15 C197.9975,34.14 195.8225,31.0825 191.9925,31.0825 Z M159.36,31.485 L156.1925,31.485 L156.1925,37.7125 L159.36,37.7125 C162.3825,37.7125 163.7075,36.865 163.7075,34.58 C163.7075,32.295 162.38,31.485 159.36,31.485 Z M55,12 C54.46,16.544 52.618,20.9 49,25 L49,25 L41,25 C44.144,20.875 46.118,16.534 47,12 L47,12 Z"/> 1568</svg> 1569 </a> 1570 <a href="https://www.fastly.com" title="Fastly" aria-label="Fastly" class="mr-2"> 1571 <svg class="footer-contributor-logo"enable-background="new 0 0 1709 735" viewBox="0 0 1709 735" xmlns="http://www.w3.org/2000/svg"><g fill="#ff282d"><path d="m1135.107 129.93v405.493h121.802v-61.956h-40.25v-405.303l-81.564.011z"/><path d="m77.437 473.467h41.405v-195.631h-41.405v-53.801l41.405-6.809v-54.462c0-65.969 14.359-94.598 98.487-94.598 18.17 0 39.707 2.683 58.563 6.08l-11.176 66.314c-12.77-2.023-19.104-2.382-27.176-2.382-29.639 0-37.133 2.957-37.133 31.916v47.131h61.541v60.611h-61.541v195.632h40.973v61.946l-163.941.017v-61.964z"/><path d="m1093.617 453.889c-12.759 2.692-23.915 2.368-31.988 2.567-33.557.825-30.658-10.204-30.658-41.844v-136.776h63.873v-60.611h-63.873v-149.061h-81.563v363.358c0 71.341 17.606 103.9 94.339 103.9 18.173 0 43.144-4.676 61.997-8.714z"/><path d="m1600.297 473.8c17.141 0 31.023 13.625 31.023 30.768 0 17.138-13.883 30.76-31.023 30.76-17.141 0-30.941-13.622-30.941-30.76.001-17.143 13.801-30.768 30.941-30.768m0 56.693c14.239 0 25.837-11.688 25.837-25.925 0-14.245-11.598-25.579-25.837-25.579-14.236 0-25.758 11.335-25.758 25.579.001 14.236 11.522 25.925 25.758 25.925m5.713-10.811-6.242-9.141h-4.306v9.141h-6.941v-30.239h12.651c7.473 0 12.133 3.782 12.133 10.468 0 4.914-2.463 8.258-6.327 9.398l7.558 10.372h-8.526zm-10.547-15.207h5.537c3.168 0 5.276-1.229 5.276-4.563 0-3.165-2.109-4.402-5.104-4.402h-5.71v8.965z"/><path d="m847.593 277.725v-10.851c-24.675-4.501-49.178-4.566-62.47-4.566-37.957 0-42.585 20.129-42.585 31.04 0 15.436 5.267 23.782 46.388 32.773 60.107 13.494 120.473 27.573 120.473 102.104 0 70.682-36.377 107.198-112.947 107.198-51.238 0-100.954-10.999-138.888-20.625v-60.909h61.764l-.036 10.821c26.579 5.134 54.448 4.62 68.997 4.62 40.487 0 47.037-21.767 47.037-33.34 0-16.061-11.611-23.774-49.562-31.47-71.5-12.217-128.244-36.628-128.244-109.257 0-68.746 45.979-95.714 122.55-95.714 51.875 0 91.318 8.045 129.272 17.676v60.5z"/><path d="m472.333 331.263-6.207-6.209-31.522 27.47c-1.591-.57-3.293-.897-5.071-.897-8.506 0-15.392 7.089-15.392 15.824 0 8.745 6.886 15.832 15.392 15.832 8.502 0 15.404-7.087 15.404-15.832 0-1.659-.252-3.257-.713-4.76z"/><path d="m597.261 453.889-.053-253.81h-81.562v23.802c-16.799-10.078-35.511-17.285-55.455-20.979h.461v-28.166h9.951v-20.714h-82.125v20.714h9.95v28.166h.566c-78.009 14.361-137.126 82.671-137.126 164.833 0 92.595 75.062 167.657 167.657 167.657 31.602 0 61.155-8.755 86.385-23.955l14.694 23.986h86.152v-81.535h-19.495zm-162.851-.185v-9.588h-9.772v9.561c-43.775-2.551-78.789-37.721-81.073-81.567h9.713v-9.772h-9.663c2.596-43.542 37.466-78.378 81.023-80.917v9.61h9.772v-9.638c42.935 2.295 77.52 35.973 81.257 78.51v2.802h-9.791v9.772h9.793l.001 2.676c-3.717 42.557-38.311 76.256-81.26 78.551z"/><path d="m1463.34 217.225h168.223v60.552h-40.209l-103.17 253.82c-29.569 71.3-78.136 138.408-152.102 138.408-18.186 0-42.396-2.015-59.185-6.049l7.377-74.028c10.773 2.015 24.884 3.341 32.288 3.341 34.301 0 72.993-21.253 85.094-58.257l-104.536-257.233h-40.211v-60.552h168.31v60.552h-40.205l59.223 145.702 59.223-145.702h-40.121v-60.554z"/></g></svg> 1572 </a> 1573 <a href="https://percy.io" title="Percy" aria-label="Percy" class="mr-2"> 1574 <svg class="footer-contributor-logo"width="142" height="42" viewBox="0 0 142 42" fill="none" xmlns="http://www.w3.org/2000/svg"> 1575 <path d="M20.9714 2.79645C9.38911 2.79645 1.15002e-07 2.17034 1.15002e-07 1.39816C1.15002e-07 0.625984 9.38911 4.16326e-07 20.9714 4.16326e-07C32.5536 4.16326e-07 41.9428 0.625984 41.9428 1.39816C41.9428 2.17034 32.5536 2.79645 20.9714 2.79645Z" transform="translate(2.06818 39.2036)" fill="#390156" fill-opacity="0.2"/> 1576 <path d="M51.6147 9.25742C51.3857 8.52394 50.7055 8.03104 49.922 8.03104C49.6887 8.03104 49.4604 8.0759 49.2433 8.16438C48.6875 8.39085 47.8206 8.65589 46.7369 8.70517C44.5468 7.14594 39.2359 3.37933 36.085 1.26608C36.085 1.26608 36.5264 2.52208 37.136 4.86861C37.136 4.86861 32.1536 2.11539 28.8366 -6.29924e-09C28.8366 -6.29924e-09 30.076 2.47659 30.1786 3.2785C30.1786 3.2785 26.2337 2.61219 20.4653 1.38946C20.4653 1.38946 24.756 3.737 25.8127 5.15041C25.8127 5.15041 20.6512 4.80824 14.5721 4.46809C14.5721 4.46809 17.6534 5.99517 19.1566 7.22849C19.1566 7.22849 13.646 8.02209 9.44809 8.22298C9.44809 8.22298 12.5616 10.6073 13.8181 11.762C13.8181 11.762 8.57655 13.7897 2.31689 17.3506C2.31689 17.3506 5.61541 17.5106 7.9936 18.2535C7.9936 18.2535 5.12517 20.7343 -1.39458e-09 26.4228C-1.39458e-09 26.4228 3.29119 26.304 5.94662 25.9523C5.94662 25.9523 3.86719 29.1058 1.28155 34.7706C1.28155 34.7706 3.05514 33.6712 4.77272 33.273C4.77272 33.273 4.957 39.6318 8.52942 40.6505L8.53238 40.6461C8.70739 40.7 8.87441 40.719 9.0194 40.719C9.19389 40.719 9.37623 40.6928 9.56154 40.641C10.6953 40.3253 11.5533 39.2364 12.5468 37.9758C12.9131 37.511 13.2908 37.0322 13.6972 36.5697C13.8102 36.9151 13.9567 37.3274 14.1325 37.7435C14.7841 39.2864 15.4821 40.0364 16.2665 40.0364C16.3263 40.0364 16.3868 40.0317 16.4461 40.0226C17.4474 39.8687 18.3755 37.9793 19.1514 36.1514C19.547 35.2198 19.8949 34.2894 20.1316 33.6303C20.1596 33.6321 20.1871 33.633 20.2151 33.6351C22.6249 33.8192 24.1108 36.1522 25.3048 38.0267C26.2047 39.4396 26.9155 40.5556 27.9077 40.6625C27.9774 40.67 28.0469 40.6738 28.1145 40.6738C29.6311 40.6738 30.1641 38.9504 30.839 36.7686C30.8838 36.6234 30.9298 36.4748 30.9769 36.3236C31.1139 36.5868 31.263 36.8621 31.4219 37.1387C32.5309 39.069 33.5127 40.0142 34.4234 40.0285L34.4492 40.0288C35.2045 40.0288 35.7026 39.5346 35.9299 38.5603C36.0998 37.8325 36.136 36.8325 36.1779 35.6744C36.2746 33.0032 36.4078 29.3559 38.2736 26.2214C39.6531 25.3756 41.175 24.6052 42.6686 23.8493C46.1458 22.0894 49.4302 20.4272 51.0778 17.9052C51.9018 16.644 52.3103 15.0963 52.2917 13.3051C52.2752 11.6985 51.9145 10.2171 51.6147 9.25742Z" transform="translate(0.221924 0.18277)" fill="#2B023F"/> 1577 <path d="M5.45908 6.81247C2.9605 6.81247 1.31568 7.94975 4.03112e-07 9.33392C0.347559 10.4624 1.2209 12.8886 2.26873 12.7275C3.2899 12.5705 4.8026 8.72634 5.49553 6.8131C5.48355 6.81297 5.47106 6.81247 5.45908 6.81247ZM21.2565 1.60044C18.929 3.82862 17.8377 6.56672 17.1013 8.82918C17.8663 10.3776 19.2046 12.7096 20.3342 12.7275C22.6079 12.7633 20.3924 5.83222 23.2796 9.19409e-07C22.5369 0.50109 21.8517 1.03079 21.2565 1.60044Z" transform="translate(14.3193 26.9798)" fill="#9E66BF"/> 1578 <path d="M36.6372 2.57107C35.439 2.26129 34.2877 2.6768 34.0656 3.49927C33.8436 4.32185 34.6349 5.23972 35.833 5.5495C37.0312 5.8594 38.1825 5.44376 38.4046 4.6213C38.6266 3.79884 37.8353 2.88084 36.6372 2.57107ZM43.998 7.52625C43.8216 8.07675 43.5769 8.61237 43.247 9.11736C40.3926 13.4868 31.8983 15.4032 27.5969 19.5209C22.3197 24.5729 23.2535 31.9347 20.5673 31.6452C18.6768 31.4414 17.2586 24.9523 12.8583 24.6161C6.21568 24.1087 4.75745 30.8785 2.02373 31.64C-0.709998 32.4016 -0.313635 25.5367 1.09836 22.4973C2.34515 19.8131 4.58181 16.0503 8.00048 16.9137C10.2626 17.485 7.63553 21.1987 7.63553 21.1987C7.63553 21.1987 12.4197 21.5022
157815.3704 17.1994C17.3301 14.3417 23.8225 4.56622 30.33 13.0221C30.33 13.0221 27.7806 5.92519 29.4344 2.47302C30.7915 -0.359727 33.9148 -0.303265 36.7572 0.417239C39.0876 1.00793 40.9342 0.565827 42.0444 0.11351C42.2612 0.0251644 42.4876 0.00147176 42.7028 0.0318446C42.2929 0.051001 41.6627 0.264115 41.2981 1.29415C40.7538 2.83195 43.7142 1.64992 44.3475 4.06034C44.3475 4.06034 44.5423 7.71908 41.4476 7.26966L41.5684 6.47618C41.5684 6.47618 40.5721 7.10343 41.2842 8.34304L41.3983 7.59381C42.0217 7.81284 42.903 7.91946 43.998 7.52625ZM44.3476 4.06034H44.3475V4.06022L44.3476 4.06034Z" transform="translate(7.61865 8.69904)" fill="#D6B5E5"/> 1579 <path d="M21.3153 1.34548C18.9679 3.59269 17.878 6.35839 17.1415 8.63194C17.5536 9.45516 18.412 10.7732 18.412 10.7732C18.3671 6.21069 22.269 0.914967 22.9706 6.5798e-07C22.3693 0.425347 21.8107 0.871235 21.3153 1.34548ZM3.67342e-08 9.1411C0.229088 9.79871 0.690224 10.7732 0.690224 10.7732C0.690224 10.7732 2.08651 7.19698 5.47943 6.55814C2.96552 6.57024 1.31864 7.73626 3.67342e-08 9.1411Z" transform="translate(14.2605 27.2348)" fill="#5C007B"/> 1580 <path d="M4.30028e-07 9.7449C2.73373 8.98331 4.19195 2.21357 10.8346 2.72096C15.2349 3.0572 16.6531 9.54628 18.5436 9.75007C18.5436 9.75007 17.5246 7.71307 16.7037 5.14196C15.8828 2.57098 13.0853 4.56737e-07 10.5436 4.56737e-07C8.00171 4.56737e-07 5.12157 1.33918 3.51396 4.69519C1.09238 9.75007 4.30028e-07 9.7449 4.30028e-07 9.7449Z" transform="translate(9.6424 30.5942)" fill="#C393DB"/> 1581 <path d="M19.3784 7.41123C17.5036 7.65636 12.3633 8.15051 9.40624 8.29204C9.40624 8.29204 10.0791 8.71916 10.6596 9.17273C14.6017 8.8961 19.7189 7.63859 19.3784 7.41123ZM14.0399 11.9447C12.2853 12.6757 7.35372 14.5845 2.27375 17.6107C2.27375 17.6107 2.94479 17.5531 3.57333 17.6107C9.20394 14.5294 14.2454 12.1204 14.0399 11.9447ZM26.0346 5.33315C24.1258 5.21065 18.7688 4.80194 14.5322 4.56475C14.5322 4.56475 15.6156 5.05815 16.6168 5.6215C21.7055 5.91628 26.4433 5.66359 26.0346 5.33315ZM8.21547 18.4362C6.21691 19.9398 3.33098 22.905 0 26.7424C0 26.7424 0.382585 26.5997 0.660993 26.587C5.29206 21.5131 8.36575 18.4772 8.21547 18.4362ZM46.8682 8.82199C46.8682 8.82199 40.1859 4.04564 36.1432 1.33426C36.1432 1.33426 36.4726 1.9208 36.7402 2.82241C40.5088 5.3828 46.8682 8.82199 46.8682 8.82199ZM6.16849 26.135C4.87806 27.6655 3.14953 31.0924 1.50343 34.9534C1.50343 34.9534 1.52622 34.9394 1.56704 34.9149C3.95887 29.8089 6.23404 26.1266 6.16849 26.135ZM37.3579 5.05135C35.8856 4.22674 31.4933 1.64203 28.9185 -3.55019e-10C28.9185 -3.55019e-10 29.4179 0.90123 29.7657 1.68929C32.9885 3.67512 37.4603 5.41885 37.3579 5.05135ZM23.0588 2.98284C21.8164 2.19038 20.4266 1.46458 20.4266 1.46458C24.8258 2.39694 29.0633 3.22469 30.4005 3.46125C30.552 3.84992 27.3119 3.845 23.0588 2.98284Z" fill="#9E66BF"/> 1582 <path d="M-1.06821e-07 6.15648e-08L4.37939 2.73251L7.22064 2.50556L-1.06821e-07 6.15648e-08Z" transform="translate(29.577 5.25861)" fill="#5C007B"/> 1583 <path d="M7.22031 2.50507L3.14969e-07 2.34524e-07L3.35338 1.58884C4.55471 2.15811 5.86626 2.47028 7.20061 2.50456L7.22031 2.50507Z" transform="translate(29.5771 5.25879)" fill="#9E66BF"/> 1584 <path d="M5.95146e-07 -2.46259e-07L6.93562 1.72686L9.96089 0.749448L5.95146e-07 -2.46259e-07Z" transform="translate(21.9153 9.23785)" fill="#5C007B"/> 1585 <path d="M9.96074 0.749995L5.59986e-07 1.7625e-07L6.12265 0.992726C6.97461 1.11598 7.83997 1.12405 8.69412 1.01655L9.96074 0.749995Z" transform="translate(21.9153 9.23755)" fill="#9E66BF"/> 1586 <path d="M5.72851 4.77127e-07L4.24838 1.0924L6.25666e-07 0.93807L5.72851 4.77127e-07Z" transform="translate(30.034 11.5306)" fill="#5C007B"/> 1587 <path d="M5.72822 3.13821e-07L7.43963e-07 0.937652L2.33105 0.867832C3.13395 0.843761 3.92694 0.685721 4.67563 0.400645L5.72822 3.13821e-07Z" transform="translate(30.0344 11.5309)" fill="#9E66BF"/> 1588 <path d="M8.9478 -3.00129e-07L6.57559 1.54731L1.37341e-07 0.937061L8.9478 -3.00129e-07Z" transform="translate(15.5197 12.623)" fill="#5C007B"/> 1589 <path d="M8.94729 2.20574e-07L-2.75745e-07 0.937652L4.9946 0.859262C6.1645 0.840862 7.32153 0.618926 8.41185 0.203788L8.94729 2.20574e-07Z" transform="translate(15.52 12.6226)" fill="#9E66BF"/> 1590 <path d="M8.94679 1.00043e-07L6.54058 1.31027L6.71446e-07 0.937062L8.94679 1.00043e-07Z" transform="translate(25.3356 15.179)" fill="#5C007B"/> 1591 <path d="M8.94729 2.10158e-07L6.06182e-07 0.937779L5.07856 0.858002C6.19296 0.840484 7.29513 0.629008 8.33382 0.233657L8.94729 2.10158e-07Z" transform="translate(25.3352 15.1785)" fill="#9E66BF"/> 1592 <path d="M10.0719 2.77042e-07L8.39474 2.68308L2.74683e-07 4.68228L10.0719 2.77042e-07Z" transform="translate(15.1758 17.9438)" fill="#5C007B"/> 1593 <path d="M-2.20955e-07 4.68208L10.0721 7.49835e-07L8.77679 1.00268C8.00905 1.59691 7.15116 2.07002 6.23404 2.405L-2.20955e-07 4.68208Z" transform="translate(15.1755 17.9439)" fill="#9E66BF"/> 1594 <path d="M3.12833e-07 5.56992L6.49958 2.78496L7.97771 -8.31125e-0
15947L3.12833e-07 5.56992Z" transform="translate(8.26013 16.811)" fill="#5C007B"/> 1595 <path d="M4.40547e-07 5.5692L7.9775 -7.76923e-07L7.95535 0.032642C7.13056 1.25348 6.01989 2.26398 4.71555 2.98007L4.40547e-07 5.5692Z" transform="translate(8.26025 16.8113)" fill="#9E66BF"/> 1596 <path d="M3.98735 2.30868e-07L3.73133 2.78597L9.15609e-08 7.34116L3.98735 2.30868e-07Z" transform="translate(7.21704 22.9347)" fill="#5C007B"/> 1597 <path d="M1.09038e-07 7.34091L3.98798 6.42466e-07C3.77138 1.2768 3.28179 2.49448 2.55113 3.57341L1.09038e-07 7.34091Z" transform="translate(7.21674 22.9351)" fill="#9E66BF"/> 1598 <path d="M1.29567 0.562707C1.29013 0.867066 0.995623 1.10891 0.637891 1.10261C0.280159 1.09656 -0.00545915 0.844633 7.80438e-05 0.540274C0.00561534 0.235789 0.300119 -0.00605963 0.657851 0.000115796C1.01558 0.00641721 1.30121 0.258222 1.29567 0.562707Z" transform="translate(42.6675 11.6351)" fill="white"/> 1599 <path fill-rule="evenodd" clip-rule="evenodd" d="M73.8306 24.4911C73.7528 24.7443 73.6263 24.9221 73.4523 25.022L73.402 25.0477C73.213 25.1269 73.0112 25.1155 72.7735 25.0557C72.0061 24.861 68.4478 24.4498 69.8711 20.1767L70.7151 17.6418L70.5237 17.1492L69.5985 14.8881L63.8032 1.04499C63.6759 0.757617 63.722 0.495948 63.8361 0.31771C63.9539 0.131887 64.1619 0.0379231 64.4558 0.0324454H67.7532C67.9791 0.0324454 68.1714 0.0952288 68.3187 0.212369C68.4665 0.32993 68.5747 0.509432 68.6663 0.730649L72.9204 10.9623L75.9719 0.759302C76.0372 0.514909 76.1529 0.329509 76.309 0.20647C76.4617 0.0859591 76.6569 0.0261244 76.885 0.0261244H80.4063C80.7051 0.0261244 80.9173 0.113347 81.0422 0.275995C81.167 0.444963 81.1837 0.689355 81.0913 1.00369L76.356 16.2833L74.5294 22.2119L73.8306 24.4911ZM59.9452 10.7368H63.5456C64.102 10.7368 64.4291 11.1013 64.2327 11.6647C63.2181 15.111 60.0106 17.4972 56.1809 17.4972C51.2059 17.4972 47.5077 13.686 47.5077 8.74841C47.5077 3.81084 51.2059 -2.44538e-07 56.1809 -2.44538e-07C60.0106 -2.44538e-07 63.2181 2.38578 64.2327 5.83213C64.4291 6.3955 64.102 6.7604 63.5456 6.7604H59.9452C59.5195 6.7604 59.2248 6.56151 58.963 6.19703C58.3741 5.36863 57.3595 4.90428 56.1809 4.90428C54.0538 4.90428 52.417 6.46207 52.417 8.74841C52.417 11.0352 54.0538 12.5925 56.1809 12.5925C57.3595 12.5925 58.3741 12.1286 58.963 11.3335C59.2248 10.9357 59.4866 10.7368 59.9452 10.7368ZM42.3134 0.895825V1.7592C42.7204 1.02855 43.6493 -0.00884887 46.0735 0.0244391C46.2492 0.0265459 46.3907 0.0943857 46.4947 0.203941C46.6475 0.364481 46.7207 0.581485 46.7207 0.862115V4.91229C46.7207 5.18702 46.6641 5.39307 46.5455 5.53043C46.4323 5.66738 46.2629 5.73648 46.0427 5.73648C45.5625 5.7192 45.1047 5.77061 44.6581 5.8907C44.2174 6.01037 43.8162 6.21684 43.4658 6.49705C43.1158 6.78315 42.8344 7.16744 42.6297 7.63558C42.422 8.11088 42.3167 8.68815 42.3134 9.37498L42.2905 13.6944C42.2663 18.2055 38.8686 17.5221 38.0754 17.4757C37.8049 17.4602 37.5947 17.4016 37.4482 17.2528C37.3013 17.1041 37.2277 16.8922 37.2277 16.6178V0.895825C37.2277 0.621515 37.3013 0.409568 37.4482 0.260826C37.5951 0.112084 37.8045 0.0379227 38.0754 0.0379227H41.4656C41.7365 0.0379227 41.9463 0.112084 42.0928 0.260826C42.2401 0.409568 42.3134 0.621094 42.3134 0.895825ZM27.6247 0.00800607C28.8212 0.0134838 29.9195 0.233437 30.9205 0.668708C31.9205 1.10356 32.7854 1.71454 33.5253 2.49659C34.259 3.28413 34.83 4.20313 35.2325 5.26034C35.6349 6.31754 35.8418 7.47377 35.8472 8.72902C35.8472 8.94392 35.8418 9.15292 35.8251 9.35138C35.8143 9.5549 35.7981 9.75336 35.7818 9.95141C35.7494 10.2156 35.6512 10.4082 35.4993 10.5295C35.3469 10.6509 35.1455 10.7111 34.9008 10.7111H24.0031C24.2096 11.3609 24.498 11.8893 24.8784 12.2967C25.2592 12.6987 25.7053 12.9907 26.2051 13.1778C26.7112 13.3649 27.2493 13.453 27.8208 13.453C28.2827 13.4475 28.7284 13.3759 29.1529 13.2275C29.5716 13.0788 29.9358 12.8803 30.235 12.6271C30.3927 12.4952 30.5505 12.3903 30.7028 12.3132C30.8605 12.2365 31.0399 12.1977 31.2463 12.1977L34.3789 12.1648C34.6781 12.1703 34.8954 12.2584 35.0261 12.429C35.1509 12.5997 35.1563 12.8201 35.0315 13.0897C34.602 14.0479 34.0306 14.8515 33.3185 15.4957C32.606 16.1455 31.7794 16.6296 30.8385 16.9604C29.8979 17.2849 28.8704 17.4505 27.7554 17.4505C26.3958 17.4446 25.1722 17.2191 24.0847 16.7784C22.9918 16.3381 22.0617 15.7271 21.2897 14.9341C20.5118 14.1469 19.9192 13.2216 19.5059 12.1703C19.0926 11.1131 18.8858 9.96784 18.8804 8.72902C18.8858 7.49021 19.0981 6.34493 19.5221 5.28815C19.9462 4.23642 20.5443 3.31152 21.3221 2.52398C22.0945 1.73139 23.0189 1.11999 24.0847 0.679664C25.1505 0.239336 26.3304 0.0134838 27.6247 0.00800607ZM4.73196 1.80808C5.39993 1.24134 6.14156 0.801018 6.92564 0.499319C7.74218 0.185823 8.60576 0.0223324 9.48098 0.0223324C11.6472 0.0223324 13.7651 1.00285 15.1851 2.58761C16.6031 4.17026 17.4804 6.35631 17.4804 8.76905C17.4804 11.1818 16.6031 13.3674 15.1851 14.9501C13.7651 16.5344 11.6472 17.5154 9.48098 17.5154C7.8945 17.5154 6.22979 17.0101 5.0699 15.8842L5.07322 21.2495C5.07614 25.7606 1.6514 25.0768 0.858162 25.0308C0.588478 25.0152 0.37
15997473 24.9558 0.230978 24.8075C0.0844829 24.6592 0.0108199 24.4464 0.0108199 24.1725L5.02144e-07 0.919421C5.02144e-07 0.639634 0.0753269 0.419259 0.2264 0.266725C0.377057 0.113769 0.593473 0.0375014 0.871065 0.0375014H3.84966C4.12725 0.0375014 4.34367 0.113769 4.49432 0.266725C4.6454 0.419259 4.71739 0.637527 4.72072 0.919421L4.73196 1.80808ZM13.1991 8.7227C13.1991 6.5948 11.5065 4.86973 9.41855 4.86973C7.33016 4.86973 5.63757 6.5948 5.63757 8.7227C5.63757 10.851 7.33016 12.5761 9.41855 12.5761C11.5065 12.5761 13.1991 10.851 13.1991 8.7227ZM25.292 5.05682C24.6773 5.48619 24.2424 6.1195 23.9869 6.94538H30.9746C30.8006 6.32302 30.5396 5.82202 30.1913 5.44784C29.8492 5.07873 29.4468 4.80905 28.9952 4.64388C28.5437 4.4787 28.0763 4.39611 27.5923 4.40159C26.6729 4.40707 25.9009 4.62197 25.292 5.05682Z" transform="translate(60.8499 8.8685)" fill="#5C007B"/> 1600 </svg> 1601 1602 </a> 1603 <a href="https://dnsimple.link/resolving-emberjs" title="Dnsimple" aria-label="Dnsimple" class="mr-2"> 1604 <?xml version="1.0" encoding="UTF-8"?> 1605 <svg class="footer-contributor-logo"width="460px" height="120px" viewBox="0 0 460 120" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> 1606 <!-- Generator: Sketch 52.6 (67491) - http://www.bohemiancoding.com/sketch --> 1607 <title>blue</title> 1608 <desc>Created with Sketch.</desc> 1609 <g id="blue" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> 1610 <path d="M48.5310493,13 C46.3747323,13 44.2184154,13.1137371 42.1755889,13.5686854 L42.1755889,34.7237814 C39.2248394,33.5864106 35.8201285,33.0177253 31.2805139,33.0177253 C15.1648822,33.0177253 2,44.0502216 2,61.7932053 C2,79.9911374 14.0299786,90 31.7344754,90 C40.4732334,90 49.4389722,87.6115214 55,84.6543575 L55,13.5686854 C52.8436831,13.1137371 50.5738758,13 48.5310493,13 L48.5310493,13 Z M32.3807531,79.9855192 C22.665272,79.9855192 16,73.266446 16,62.4927596 C16,51.8349193 23.1171548,45 32.6066946,45 C36.4476987,45 39.9497908,45.4633844 43,47.4327679 L43,78.2478279 C39.6108787,79.5221349 36.1087866,80.1013653 32.3807531,79.9855192 L32.3807531,79.9855192 Z M95.8993289,33 C84.261745,33 74.7919463,37.5436105 70,41.5192698 L70,88.4320487 C72.1677852,88.8864097 74.3355705,89 76.3892617,89 C78.557047,89 80.8389262,88.8864097 82.8926174,88.4320487 L82.8926174,47.7667343 C85.4026846,46.2900609 89.852349,44.8133874 94.8724832,44.8133874 C103.201342,44.8133874 107.993289,48.5618661 107.993289,58.4442191 L107.993289,88.4320487 C110.275168,88.8864097 112.328859,89 114.496644,89 C116.550336,89 118.832215,88.8864097 121,88.4320487 L121,55.3772819 C121,42.9959432 113.355705,33 95.8993289,33 L95.8993289,33 Z M154.427861,90 C169.303483,90 178,83.2007952 178,71.9821074 C178,61.3300199 169.41791,57.3638171 157.631841,55.5506958 C148.363184,54.0775348 145.960199,52.3777336 145.960199,48.8648111 C145.960199,45.4652087 148.935323,43.3121272 155.800995,43.3121272 C162.323383,43.3121272 167.930348,45.2385686 171.706468,47.3916501 C174.338308,45.3518887 176.054726,42.1789264 176.626866,38.2127237 C173.079602,35.7196819 166.099502,33 156.258706,33 C142.527363,33 133.487562,39.7992048 133.487562,49.7713718 C133.487562,61.1033797 142.641791,64.6163022 152.253731,66.0894632 C161.9801,67.5626243 165.069652,69.6023857 165.069652,73.2286282 C165.069652,76.8548708 162.323383,79.6878728 154.656716,79.6878728 C146.074627,79.6878728 141.268657,76.7415507 137.950249,74.361829 C135.20398,76.0616302 133.029851,79.1212724 132,83.2007952 C135.089552,85.8071571 142.298507,90 154.427861,90 L154.427861,90 Z M195.616438,27 C200.157534,27 204,23.2222222 204,18.5 C204,13.7777778 200.157534,10 195.616438,10 C190.842466,10 187,13.7777778 187,18.5 C187,23.2222222 190.842466,27 195.616438,27 L195.616438,27 Z M195.557522,89 C197.743363,89 199.929204,88.8861284 202,88.4306418 L202,34.5693582 C199.929204,34.1138716 197.628319,34 195.557522,34 C193.371681,34 191.185841,34.1138716 189,34.5693582 L189,88.4306418 C191.185841,88.8861284 193.486726,89 195.557522,89 L195.557522,89 Z M279.136729,33 C271.758713,33 265.072386,35.8397566 260.576408,39.2474645 C256.541555,35.3853955 250.546917,33 242.707775,33 C231.294906,33 221.380697,37.7707911 217,41.5192698 L217,88.4320487 C219.190349,88.8864097 221.380697,89 223.455764,89 C225.646113,89 227.951743,88.8864097 230.02681,88.4320487 L230.02681,47.7667343 C232.908847,46.0628803 236.9437,44.8133874 241.209115,44.8133874 C250.085791,44.8133874 253.428954,50.3793103 253.428954,58.1034483 L253.428954,88.4320487 C255.619303,88.8864097 257.809651,89 260.115282,89 C262.190349,89 264.495979,88.8864097 266.571046,88.4320487 L266.571046,54.2413793
1610C266.571046,52.5375254 266.340483,50.8336714 265.994638,49.2434077 C268.646113,47.0851927 272.335121,44.8133874 277.63807,44.8133874 C286.514745,44.8133874 289.97319,50.3793103 289.97319,58.1034483 L289.97319,88.4320487 C292.048257,88.8864097 294.238606,89 296.544236,89 C298.619303,89 300.924933,88.8864097 303,88.4320487 L303,54.2413793 C303,42.5415822 294.930295,33 279.136729,33 L279.136729,33 Z M340.997854,33 C330.761803,33 322.23176,36.9807976 317,41.3028065 L317,109.431315 C319.274678,109.886263 321.321888,110 323.482833,110 C325.643777,110 327.804721,109.886263 329.851931,109.431315 L329.851931,88.5036928 C333.263948,89.6410635 336.903433,90.0960118 341.45279,90.0960118 C356.465665,90.0960118 370,79.5184638 370,61.3205318 C370,42.6676514 357.48927,33 340.997854,33 L340.997854,33 Z M338.619247,79 C334.439331,79 331.050209,78.3131313 328,76.8249158 L328,47.6329966 C331.276151,45.8013468 334.778243,45 338.506276,45 C348.334728,45 355,51.2962963 355,61.7138047 C355,72.4747475 348.334728,79 338.619247,79 L338.619247,79 Z M388,89 C390.333333,89 392.789474,88.8858859 395,88.4294294 L395,13.5705706 C392.666667,13.1141141 390.210526,13 387.877193,13 C385.54386,13 383.210526,13.1141141 381,13.5705706 L381,88.4294294 C383.45614,88.8858859 385.789474,89 388,89 L388,89 Z M458,57.2988048 C458,42.8784861 447.714286,33 433.2,33 C417.771429,33 406,45.0358566 406,61.7270916 C406,79.3266932 417.657143,90 433.885714,90 C444.742857,90 451.828571,86.0258964 456.4,82.3924303 C455.942857,79.0996016 453.657143,75.4661355 450.8,73.6494024 C447.257143,76.1474104 442.685714,79.2131474 434.8,79.2131474 C425.771429,79.2131474 420.285714,73.7629482 419.257143,64.9063745 L457.542857,64.9063745 C457.885714,61.9541833 458,60.1374502 458,57.2988048 L458,57.2988048 Z M419,57 C419.9163,49.5877193 424.84141,44 432.859031,44 C441.678414,44.1140351 445,50.6140351 445,57 L419,57 Z" id="dnsimple-copy" fill="#1A5EC6"></path> 1611 </g> 1612 </svg> 1613 </a> 1614 </div> 1615 </div> 1616</div> 1617</footer>
1617<script type="x/boundary" id="fastboot-body-end"></script>
1617 1618 1619
1619<script src="/assets/vendor-8cf0792cec47f39329abb5474045765b.js"></script>
vendor: 1 bytes, line 1619
1619
1620<script src="/assets/chunk.1422.bb57a581cf24f86ab606.js"></script>
vendor: 1 bytes, line 1620
1620
1621<script src="/assets/chunk.3524.1b09cb7d805ee15af53c.js"></script>
1621 1622
1622<script src="/assets/deprecation-app-7f7bfe36beba20c46e6758a433b445e7.js"></script>
1622 1623 1624 1625 </body> 1626</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.