Π ΡΡΠΎΠΌ Π²ΡΠΏΡΡΠΊΠ΅ ΠΊΠ²Π΅ΡΡΠ° ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Glimmer Π² Ember.js.
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Glimmer.js ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ:
tagName
, attributeBindings
ΠΈ Ρ. Π.)@
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ {{@firstName}}
this.args
@tracked
<AngleBracket />
β¦attributes
Π‘Π»Π΅Π΄ΡΡ Π΄ΡΡ Ρ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°Π»ΠΈΠ·ΠΌΠ° Ember, ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π²Π½Π΅Π΄ΡΠΈΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΏΠΎ ΡΠ°ΡΡΡΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠΈ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Ρ Π½Π°ΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΠ²ΡΠ·Ρ Π½Π° ΡΠ°Π½Π½ΠΈΡ ΡΡΠ°ΠΏΠ°Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΌΡ ΡΠΆΠ΅ Π½Π°ΡΠ°Π»ΠΈ ΠΏΡΡΡ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌ Glimmer Π² Ember. ΠΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΆΠ΅ Π½Π°ΡΠ°Π»ΠΈ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ:
template-only-glimmer-components
).@
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, {{@firstName}}
).Π ΡΡΠΎΠΌ Π²ΡΠΏΡΡΠΊΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Glimmer Π² Ember, ΡΠ°Π·ΡΠ΅ΡΠΈΠ² Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠ°ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΊΠ΅Ρ @glimmer/component
Π² Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΡ Ember, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ API ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Glimmer.js.
ΠΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ ΡΡΡ ΡΠ°Π±ΠΎΡΡ Π½Π° ΡΡΠ°ΠΏΡ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Π΄Π»Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ Ember. Π€Π°Π·Π° 0 ΡΠ²ΡΠ·Π°Π½Π° Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ² Π² Ember.js Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ². Π€Π°Π·Ρ 1, 2 ΠΈ 3 ΠΏΠΎΡΠ²ΡΡΠ΅Π½Ρ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎΠΌΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ API ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Glimmer.js.
Π ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΌΡ ΡΠ³Π»ΡΠ±ΠΈΠΌΡΡ Π² ΡΡΠ°ΠΏΡ 0 ΠΈ 1, ΠΌΡ ΠΎΡΠ»ΠΎΠΆΠΈΠΌ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ ΡΡΠ°ΠΏΠΎΠ² Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠ°ΠΏΡ Π½Π΅ Π±ΡΠ΄ΡΡ Π±Π»ΠΈΠΆΠ΅ ΠΊ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ.
TL; DR: Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ API CustomComponentManager Π² Ember.js, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠ°ΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ API ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Ember ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ Ember.Component
. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠ΅ API ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π² Ember, Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠΎΠ±ΡΠΈΡΡ Ember, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°.
ΠΠΎΠ³Π΄Π° ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Β«ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²Β», ΠΌΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΠΈΠΌΠ΅Π΅ΠΌ Π² Π²ΠΈΠ΄Ρ:
Π₯ΠΎΡΡ Glimmer VM Π²Π²ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ½ΡΡΠΈΠ΅ Β«Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²Β», ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΡΡΠΎΡ API ΠΎΡΠ΅Π½Ρ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΡΠ»ΠΎ Π±Ρ ΠΏΡΠ΅ΠΆΠ΄Π΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΈΡ Π½Π°ΠΏΡΡΠΌΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ³ΠΎ API Π² Ember, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΡ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ, Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΡΡΠΎ Π½Π°ΡΡΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΈ ΠΎΠ½ΠΈ Π΅ΡΠ΅ Π½Π΅ ΡΡΠ°Π±ΠΈΠ»ΡΠ½Ρ.
ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ Ember API ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ CustomComponentManager
ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠ°Π±Π»ΠΎΠ½ Π΄Π΅Π»Π΅Π³Π°ΡΠ°. CustomComponentManager
ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΌΠ΅Π½ΡΡΡΡ ΠΏΠ»ΠΎΡΠ°Π΄Ρ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΠΈ API, ΡΠ΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ComponentManager
Glimmer VM API, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π°Π²ΡΠΎΡΠ°ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ ΠΏΠΎΠΏΠ°ΡΡΡ Π² Β«ΡΠΌΡ ΡΡΠΏΠ΅Ρ
Π°Β».
ΠΡΠ°ΠΊ, ΠΊΠ°ΠΊ Ember ΡΠ·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°? ΠΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΡ RFC Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ»Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ComponentDefinition
, ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ
, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° Ρ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΡΡ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π° Π² Ember ΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Π»Π°, ΠΊΠ°ΠΊΠΎΠΉ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π° ComponentDefinition
ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ API Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ, ΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΎΠΌ ΡΠ±ΠΎΡΠΊΠΈ.
ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌ API Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΠΊ ΠΊΠ»Π°ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°. ΠΡΠΎΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ°Π³ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ°ΠΌΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΏΠΎΠΊΠ° ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
Π ΡΡΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²Π½ΠΎ ΡΠΎΠ³Π»Π°ΡΠ°ΡΡΡΡ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΡ
ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ². ΠΠ½ΠΈ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ componentManager
, ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Ember, ΠΊΠΎΡΠΎΡΠ°Ρ Π°Π½Π½ΠΎΡΠΈΡΡΠ΅Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²:
import { componentManager } from '@ember/custom-component-manager';
import EmberObject from '@ember/object';
export default componentManager(EmberObject.extend({
// ...
}), 'glimmer');
Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ°:
import { componentManager } from '@ember/custom-component-manager';
export default @componentManager('glimmer') class {
// ...
}
ΠΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Ember ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΊΠ»Π°ΡΡ, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, Π΅ΡΡΡ Π»ΠΈ Ρ Π½Π΅Π³ΠΎ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ° Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ². ΠΡΠ»ΠΈ ΡΡΠΎ ΡΠ°ΠΊ, ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅. Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ember Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΊΠ»ΡΡΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° component-manager:glimmer
.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ
Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ². ΠΠ°Ρ Π°Π΄Π΄ΠΎΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Glimmer ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈΠ· addon/component-managers/glimmer.js
ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ±ΡΡΠ½ΡΡ
ΠΏΡΠ°Π²ΠΈΠ» ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ.
Π₯ΠΎΡΡ ΡΡΠΎΡ API ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π΅Π½ ΠΈ Π½Π΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΡΠ³ΠΎΠ½ΠΎΠΌΠΈΡΠ΅Π½, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΎΡ Π½Π΅Π³ΠΎ, Π²Π²ΠΎΠ΄Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π°Π΄Π΄ΠΎΠ½ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ turbo-component
Ρ
ΠΎΡΠ΅Π» ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΎΠ½ ΠΌΠΎΠ³ Π±Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
// addon/index.js
import EmberObject from '@ember/object';
import { componentManager } from '@ember/custom-component-manager';
export default componentManager(EmberObject.extend({
// ...
}), 'turbo');
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° TurboComponent
Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²:
import TurboComponent from 'turbo-component';
export default TurboComponent.extend({
didInsertElementQuickly() {
// ...
}
});
ΠΠΈ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΡΡΠΎΠ²ΠΊΠΎΠΌ, ΠΈ ΠΏΠΎ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Π²Π°ΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ API ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π½Π΅ Π½Π°ΡΡΡΠ°Π»ΠΎ ΡΠ°Π±ΠΎΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΡΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ API ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ. ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Ember ΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠ΅ΡΠ΅Π· ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ parentView
. ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Ember.Component
, Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Ember Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ parentView
.
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ CurlyComponentManager
Π² Ember ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ Β«ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΠ±Π»Π°ΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΒ», ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΡΠ΅Π»Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ.
Π§ΡΠΎΠ±Ρ Π½Π΅ Π΄Π°ΡΡ ΠΏΠ»ΠΎΡ ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ°ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π½Π°ΡΡΡΠΈΡΡ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΡ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΡΠΊΡΡΠ²Π°Ρ ΠΎΡΡΡΡΠ΅ ΡΠ³Π»Ρ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ API.
import CustomComponentManager from "@ember/custom-component-manager";
export default new CustomComponentManager({
// major and minor Ember version this manager targets
version: "3.1",
create({ ComponentClass, args }) {
// Responsible for instantiating the component class and passing provided
// component arguments.
// The value returned here is passed as `component` in the below hooks.
},
getContext(component) {
// Returns the object that serves as the root scope of the component template.
// Most implementations should return `component`, so the component's properties
// are looked up in curly expressions.
},
update(component, args) {
// Called whenever the arguments to a component change.
},
destroy(component) {
}
});
ΠΠ°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ Component
Π² Ember ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π΄Π»ΠΈΠ½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ
Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π°ΠΊΡΠΈΠ²Π½ΠΎ. ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΡΠ½ΠΈΠ·ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ°Π³Π° ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠΏΠΎΡΠΎΠ± Π²ΡΠ±ΠΎΡΠ° ΡΠΏΡΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ API ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Glimmer.js ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΠΊΠ΅Ρ @glimmer/component
. Π§ΡΠΎΠ±Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ, ΠΌΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Glimmer Component
ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΠΎΡ Ember.Object
Π°Π΄ΡΠ΅ΡΡ @glimmer/component/compat
.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Β«ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Ember-GlimmerΒ»:
// src/ui/components/user-profile/component.js
import Component from '@glimmer/component/compat';
import { computed } from '@ember/object';
export default Component({
fullName: computed('args.firstName', 'args.lastName', function() {
let { firstName, lastName } = this.args
return `${firstName} ${lastName}`;
})
isAdmin: false,
toggleAdmin() {
this.set('isAdmin', !this.isAdmin);
}
});
{{!-- src/ui/components/user-profile/template.hbs --}}
<h1>{{fullName}}</h1>
<p>
Welcome back, {{@firstName}}!
{{#if isAdmin}}
<strong>You are an admin.</strong>
{{/if}}
</p>
<button {{action toggleAdmin}}>Toggle Admin Status</button>
ΠΡΠΈΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΡΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²:
actions
.args
Π° Π½Π΅ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΡΠ²ΠΎΠΉΡΡΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π½Π°ΠΏΡΡΠΌΡΡ.ΠΠ΅ ΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ ΡΠΎ, ΡΡΠΎ Π½Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ:
@tracked
Π½Π΅ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π΄ΠΎ ΡΠ°Π·Ρ 3.layout
ΠΈΠ»ΠΈ template
.childViews
, parentView
, nearestWithProperty
ΠΈ Ρ. Π.tagName
, attributeBindings
ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ JavaScript DSL Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.send
ΠΈΠ»ΠΈ sendAction
Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ.ember-view
class ΠΈΠ»ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° guid.rerender()
.attrs
(ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ args
).this.$()
Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° jQuery Π΄Π»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°.appendTo
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π² DOM.willInsertElement
didRender
willRender
willClearRender
willUpdate
didReceiveAttrs
didUpdateAttrs
parentViewDidChange
on()
Π΄Π»Ρ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²; Ρ
ΡΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΊΠ°ΠΊ ΠΌΠ΅ΡΠΎΠ΄Ρ.ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ² ΡΡΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ ΡΠΎΠ³Π»Π°ΡΡΠ΅ΡΡΡ Ρ ΡΡΠΈΠ»ΠΈΡΠΌΠΈ ΠΏΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² JavaScript . Π ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ Π΄ΠΈΠ·Π°ΠΉΠ½ΠΎΠΌ, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌ Π² RFC Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ² ES , ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°:
// src/ui/components/user-profile/component.js
import Component from '@glimmer/component/compat';
import { computed } from 'ember-decorators/object';
export default class extends Component {
isAdmin = false;
@computed('args.firstName', 'args.lastName')
get fullName() {
let { firstName, lastName } = this.args;
return `${firstName} ${lastName}`;
})
toggleAdmin() {
this.set('isAdmin', !this.isAdmin);
}
});
Π€Π°Π·Π° 2 ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ΅ΡΠ΅Π· ΡΠ³Π»ΠΎΠ²ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ ( <UserAvatar @user={{currentUser}} />
) Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΠΈΠ³ΡΡΠ½ΡΠΌ ΡΠΊΠΎΠ±ΠΊΠ°ΠΌ ( {{my-component user=currentUser}}
). ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΡΡΡΠ°Π½ΡΠ΅Ρ Π΄Π²ΡΡΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ HTML, ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Β«ΡΠ°Π·Π±ΠΈΠ²Π°ΡΡΒ» ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ Π² ΡΠ°Π±Π»ΠΎΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΡΠ΅ΡΠ΅Π· β¦attributes
.
{{! src/ui/components/UserAvatar/template.hbs }}
<div ...attributes> {{! <-- attributes will be inserted here }}
<h1>Hello, {{@firstName}}!</h1>
</div>
<UserAvatar @user={{currentUser}} aria-expanded={{isExpanded}} />
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΈΠΌ:
<div aria-expanded="true">
<h1>Hello, Steven!</h1>
</div>
Π€Π°Π·Π° 3 Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ° @tracked
Π² Ember. ΠΠ΅ΡΠ°Π»ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ Ember ΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠΌΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΏΠΎΡΠ²ΡΡΡΡ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΡΠΌΠΎΠ³ΡΡ ΡΠ΄Π°Π»ΠΈΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ @glimmer/component/compat
ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΡΠ½ΡΠΉ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΠΎΡΠ»ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΎΡ Ember.Object.
Π ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Β«autotrackΒ» (ΠΊΠΎΡΠΎΡΠ°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²) ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌΡ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
import Component, { tracked } from '@glimmer/component';
export default class extends Component {
<strong i="24">@tracked</strong> isAdmin = false;
<strong i="25">@tracked</strong> get fullName() {
let { firstName, lastName } = this.args;
return `${firstName} ${lastName}`;
}
toggleAdmin() {
this.isAdmin = !this.isAdmin;
}
}
ΠΠΎΠ³Ρ Π»ΠΈ Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΡΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠ°ΠΊ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ° ember-view
ΠΈΠ»ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ id
Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Glimmer Π΄Π»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΌ CSS?
Π΄Π°. ΠΡΠΈΠΌΠ΅Ρ:
<div class="ember-view" id="{{uniqueId}}">
Component content goes here.
</div>
import Component from '@glimmer/component';
import { guidFor } from '@ember/object/internals';
export default class extends Component {
get uniqueId() {
return guidFor(this);
}
}
custom-component-manager
ΡΠΈΠ»ΠΈΠ°Π»CustomComponentManager
Π·Π° ΡΠ»Π°Π³ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈtracked
ΡΠΈΠ»ΠΈΠ°Π»@tracked
ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ EmberΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅ ΡΠΏΠΈΡΠΊΠΈ Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ. ΠΠΎ ΠΌΠ΅ΡΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ ΡΠ·Π½Π°Π΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅.
glimmer-custom-component-manager
componentManager
{ componentManager } from '@ember/custom-component-manager'
CustomComponentManager
APICustomComponentManagerDelegate
version
create()
getContext()
update()
destroy?()
didCreate?()
didUpdate?()
getView?()
version
ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈchildViews
ΠΈ parentView
Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ
sparkles-components
addoncomponentManager
ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ· EmberCustomComponentManager
ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π° ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ember@glimmer/component
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠΈ Emberimport Component from '@glimmer/component'
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΎΡΡΠΎΠΉ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ JavaScript.import Component from '@glimmer/component/compat'
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ Ember.Object
create(injections)
didInsertElement()
willDestroy()
didUpdate()
click()
ΠΈ Ρ. Π΄.), Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡthis.bounds
this.element
ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π΄Π»Ρ this.bounds
this.args
Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅this.args
ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎ Π²ΡΠ·ΠΎΠ²Π° didUpdate
this.args
Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° (Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ)args
create()
) Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²? ΠΡΠΎΡΠΎΠΊΠΎΠ» ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΡΠΎΡΡΡΠΌ, Π½ΠΎ Π½Π° ΡΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΡΠΌ.CustomComponentManager
?CustomComponentManager
?ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Π² ΠΊΠ°Π½Π°Π»Π΅ # st-glimmer-components Π² Slack ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° Ember, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Ρ Π² ΠΏΠΎΠΌΠΎΡΠΈ! ΠΡΡΠΊΠ΅ΡΡ ΡΠΎΠΆΠ΅ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ ΠΏΡΠΎΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΊΠ°ΠΊ Π΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ»Π±Π°ΡΡ.
Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΡΠΈΠΌ;
{{! src/ui/components/UserAvatar/template.hbs }}
<div ...attributes> {{! <-- attributes will be inserted here }}
<h1>Hello, {{@firstName}}!</h1>
</div>
Π― Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΠΈΠ³ΡΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
( {{@firstName}}
), Π° Π½Π΅ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΠΎ Π·Π½Π°ΠΊΠ°ΠΌΠΈ? ΠΠ° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ <div ...attributes>
. ΠΠ»Ρ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΡ Π½Π΅ Π»ΡΡΡΠ΅ Π±ΡΠ»ΠΎ Π±Ρ <div {{...attributes}}>
?
Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ Π»ΠΈ RFC Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² glimmer, Π³Π΄Π΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ?
@tomdale Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΆΠΈΠΌΠ° didReceiveAttrs()
Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΠΈ Π±ΡΠ»ΠΎ Π±Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π° Π½ΠΎΠ²ΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΏΠ΅ΡΠ΅Π΄ΠΎΠ²ΠΎΠΉ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ.
@dbbk Π‘Π°ΠΌΠ°Ρ Π±ΠΎΠ»ΡΡΠ°Ρ ΠΏΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°ΠΌ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ {{...attributes}}
Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ΅Π½ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ, ΠΊΠ°ΠΊ Π² Π΄ΡΡΠ³ΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ ΡΠΈΠ³ΡΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ, ΠΈ Π½Π° ΡΠ΅ΡΡΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΌΠ΅Π½ΡΡΠ΅, ΠΊΠ°Π·Π°Π»ΠΎΡΡ, Π»Π΅Π³ΡΠ΅ Π²Π²ΠΎΠ΄ΠΈΡΡ ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΌΠ½ΠΎ.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΡΡΠ°Π²ΠΈΡΡ Π»ΡΠ΄Π΅ΠΉ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΡΡΠΎ attributes
ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ - Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΄Π΅Π»Π°ΡΡ <SomeComponent something={{attributes}} />
, ΡΡΠΎ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΡΠΎΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ, ΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² Π΄ΡΡΠ³ΠΈΡ
ΠΏΠΎΠ·ΠΈΡΠΈΡΡ
, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ.
ΠΡΠ»ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΏΡΠΈΠ½ΡΡΡ ΠΊΠ°ΠΊ @arguments
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΡΠ°Π±Π»ΠΎΠ½Π°, ΡΠ°ΠΊ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ...
spread Π² Handlebars, Π½ΠΎ ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΡ
Π½Π΅Ρ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅ΠΉ Π΄ΠΎΡΠΎΠΆΠ½ΠΎΠΉ ΠΊΠ°ΡΡΠ΅. ΠΠ΅ ΡΠ΄ΠΈΠ²Π»ΡΡΡ, Π΅ΡΠ»ΠΈ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΌΡ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ ...attributes
Π½Π° {{...@attributes}}
ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π² ΡΡΠΎΠΌ ΡΠΎΠ΄Π΅.
@ Gaurav0 API ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Glimmer Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡΡ ΡΠ΅ΡΠ΅Π· RFC-ΠΏΡΠΎΡΠ΅ΡΡ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π±ΡΠ΄Π΅Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Ember, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ Π·Π°Ρ ΠΎΡΠΈΠΌ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ. Π ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ ΠΊ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΡ Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π΅ΡΡΡ ΠΎΠ΄Π½Π° ΠΏΡΠΈΡΡΠ½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ: ΠΌΡ Π½Π΅ ΠΊΠ°Π½ΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅ΠΌ API Β«ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΡΒ», Π½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌ ΡΠΎΡΠ΅Π²Π½ΠΎΠ²Π°ΡΡΡΡ ΠΏΠΎ ΡΠ²ΠΎΠΈΠΌ Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ²Π°ΠΌ ΡΠ΅ΡΠ΅Π· ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ Π½Π°Π΄ΡΡΡΠΎΠ΅ΠΊ.
@ Turbo87 ΠΡΠ»ΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ Π΄ΠΎΠ±Π°Π²Π»Ρ Π² ΡΠΏΠΈΡΠΎΠΊ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΊ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π½ΠΎΠ²ΡΠΌ API.
Π― ΠΎΠ±ΡΠ°ΡΡΡΡ ΠΊ ΡΠ»ΡΡΠ°Ρ didReceiveAttrs()
ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Ρ ΠΏΠΎΠ΄Π½ΡΠ»ΠΈ Π΅Π³ΠΎ. ΠΠ±ΡΡΠ½ΠΎ Π»ΡΠ΄ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΡ Π»ΠΎΠ²ΡΡΠΊΡ, ΡΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Π½ΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΠ·ΡΡΠ΄Π½ΡΡ ΡΠ°ΡΡΡ Π½Π΅Π½ΡΠΆΠ½ΠΎΠ³ΠΎ Π² ΡΡΠΈΡ
Ρ
ΡΠΊΠ°Ρ
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ. Π, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, Π»ΡΠ΄ΠΈ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΡΠΎΠ²Π΅ΡΡΠ°ΡΡ ΡΠΎΠΊΠΈΡΡΡΡΠΈΠ΅ Π²Π΅ΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΈΡ
Ρ
ΡΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π½Π° Π³ΠΎΡΡΡΠ΅ΠΌ ΠΏΡΡΠΈ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°.
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Β«Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π½ΠΈΡΒ» Π½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Β«Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²ΡΡΡΠ³ΠΈΠ²Π°Π½ΠΈΡΒ». ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ. ΠΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ. ΠΡΠΈΠΌΠ΅Ρ:
ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ:
import Component from "@ember/component";
import { computed } from "@ember/object";
export default Component.extend({
didReceiveAttrs() {
this.set('firstName', this.attrs.firstName || 'Tobias');
this.set('lastName', this.attrs.lastName || 'Bieniek');
},
fullName: computed('firstName', 'lastName', function() {
return `${this.firstName} ${this.lastName}`;
})
});
Π‘Π΄Π΅Π»Π°ΠΉ ΡΡΠΎ:
import Component, { tracked } from "@glimmer/component";
export default class extends Component {
<strong i="27">@tracked</strong> get firstName() {
return this.args.firstName || 'Tobias';
}
<strong i="28">@tracked</strong> get lastName() {
return this.args.lastName || 'Bieniek';
}
<strong i="29">@tracked</strong> get fullName() {
return `${this.firstName} ${this.lastName}`;
}
}
ΠΡΠΈΠ·Π½Π°ΡΡΡ, Ρ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΊΠ΅ΠΏΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠ½ΠΎΡΠΈΠ»ΡΡ ΠΊ ΡΡΠΎΠΌΡ, Π½ΠΎ @wycats ΡΠ±Π΅Π΄ΠΈΠ» ΠΌΠ΅Π½Ρ, ΠΈ ΠΏΠΎ ΠΌΠΎΠ΅ΠΌΡ ΠΎΠΏΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Glimmer.js Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π³ΠΎΠ΄ ΠΈΠ»ΠΈ ΠΎΠΊΠΎΠ»ΠΎ ΡΠΎΠ³ΠΎ, ΠΌΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡ Ρ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ didReceiveAttrs
ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ
Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΡ
ΡΠ²ΠΎΠΉΡΡΠ².
@tomdale Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ didReceiveAttrs
Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π²Π΅ΡΠ΅ΠΉ. ΠΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΡΡΠΎ ΠΈΠ·Π±Π°Π²Π»ΡΠ»ΠΎ ΠΌΠ΅Π½Ρ ΠΎΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΈΡΠ°ΡΡ Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ
ΠΎΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΡ Ρ
ΠΎΡΠ΅Π»ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Π·Π°ΠΏΡΠΎΡ ajax, Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ? Π― Π±Ρ Π½Π΅ Ρ
ΠΎΡΠ΅Π» Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ ΠΊ Π³Π΅ΡΡΠ΅ΡΡ.
Π΄Π°, Ρ Π΄ΡΠΌΠ°Ρ ΠΎΠ± Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ
Π²Π°ΡΠΈΠ°Π½ΡΠ°Ρ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ - Π°Π½ΠΈΠΌΠ°ΡΠΈΡ. ΡΠΊΠ°ΠΆΠ΅ΠΌ, Ρ Ρ
ΠΎΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° collapsed
ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ Ρ true
Π½Π° false
ΠΈ Π΄ΡΡΠ³ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π΄ΡΡΠ³ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ. ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΠΌΠ΅ΡΡΠ°Π½ΠΈΡ?
@ turbo87 @ Gaurav0 Π, Ρ
ΠΎΡΠΎΡΠΎ, Π·Π½Π°ΡΠΈΡ, ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ Π²ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π½ΠΎΠΆΠ½ΡΠ΅ ΠΏΠΈΡΡΠΎΠ»Π΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠΌ didReceiveAttrs
! ΠΡΠ΅, ΡΡΠΎ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π²ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΎ Π² Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΡ
ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°Ρ
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ didInsertElement
ΠΈΠ»ΠΈ didUpdate
.
didInsertElement
, ΠΏΠΎΡ
ΠΎΠΆΠ΅, Π½Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°. didUpdate
ΠΏΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΉ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, Π²Π΅ΡΠ½ΠΎ? Π½ΠΎ ΡΡΠΎ, Π΅ΡΠ»ΠΈ Ρ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π΄Π»Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°? ΡΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ didUpdate
Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½. π€
Π’Π°ΠΊΠΆΠ΅ didInsertElement
Π²ΡΠ΄Π°Π΅Ρ ΡΠ΅ΡΡΠ΅Π·Π½ΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π² Glimmer, Π΅ΡΠ»ΠΈ ΠΌΡ ΡΡΠΎ-ΡΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΡ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ.
@ Turbo87 ΠΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° didUpdate
. ΠΡΠ° Π»ΠΎΠ²ΡΡΠΊΠ° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ΅ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅ _ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ_ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ. Π‘ΠΌ. ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ: http://tinyurl.com/y7osxpy2. ΠΠΎΠ³Π΄Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π²ΡΠ·ΠΎΠ² didUpdate
Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Β«ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Β» ΡΡΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ.
@ Gaurav0 ΠΡ ΠΏΠ΅ΡΠ΅Π΄Π²ΠΈΠ³Π°Π΅ΡΠ΅ ΡΡΠΎΠΉΠΊΠΈ Π²ΠΎΡΠΎΡ. ;) ΠΠ°Ρ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°Π» Π·Π°ΠΏΡΠΎΡ ajax Π² ΠΎΡΠ²Π΅Ρ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΡΡΠΎ Π½Π΅ ΠΏΡΠΈΠ²Π΅Π»ΠΎ Π±Ρ ΠΊ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ, Π΅ΡΠ»ΠΈ Π±Ρ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ Π² didInsertElement
. ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π² ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π»Π΅Π½ΠΈΠ²ΡΡ
Π³Π΅ΡΡΠ΅ΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ ΠΏΠΎΡΠ»Π΅ ajax, ΡΡΠΎ Π½Π΅ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π² Π΄ΡΡΠ³ΠΎΠΌ ΡΠΈΠΊΠ»Π΅ ΡΠΎΠ±ΡΡΠΈΠΉ.
Ρ ΠΎΡΠΎΡΠΎ, Π΄Π»Ρ ΠΌΠ΅Π½Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ. Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ Π½Π΅ Ρ ΠΎΡΠ΅Π» ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π½Π° ΡΡΠΎΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π²Π΅ΡΠΈ, ΠΏΡΠΎΡΡΠΎ Ρ ΠΎΡΠ΅Π» ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠ½ΡΡΡ, ΡΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΡΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° ΠΏΠΎ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ :)
@tomdale ΡΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎ? Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π΅Π°ΠΊΡΠΈΠ²Π½ΡΠΌ.
@tomdale Π₯ΠΎΡΠΎΡΠΎ, ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π·Π°ΠΏΡΡΡΠΈΡΡ Π·Π°ΠΏΡΠΎΡ ajax, ΠΊΠΎΠ³Π΄Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ, ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΡ Π°ΡΡΠΈΠ±ΡΡ. ΠΡ Π½Π΅ Ρ ΠΎΡΠΈΠΌ ΠΏΠΈΡΠ°ΡΡ Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ. ΠΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π² didInsertElement?
@ Gaurav0 Π§ΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ°? Π‘Π»Π΅Π΄ΡΡ DDAU, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠ΄, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ , Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ°, ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π·Π° Π·Π°ΠΏΡΡΠΊ Π·Π°ΠΏΡΠΎΡΠ° AJAX.
ΠΡΡΠΈΠ±ΡΡ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΎΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° / ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°. DDAU.
@ Gaurav0 @tomdale ΠΡΡΠ³ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ember-leaflet / didReceiveAttrs
ΠΈΠ»ΠΈ observer
. ΠΠ°ΠΊ Π±Ρ / ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ?
@nickschot ΠΡΠΌΠ°Ρ, Ρ ember-leaflet
.
ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΊΠΎΠΏΠ°Π΅ΡΠ΅ΡΡ Π² ember-leaflet
/ ember-composability-tools
, Π²Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΠ΅, ΡΡΠΎ ΠΎΠ½ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ didReceiveAttrs
ΠΈΠ»ΠΈ didUpdate
ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Ρ
ΡΠΊΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π°, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΡΠΎΠΌΡ . ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π΅ΠΌΡ Π½ΡΠΆΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ
ΡΠΊΠΈ init
ΠΈ willDestroy
, ΡΡΠΎΠ±Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ / ΠΎΡΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π½Π° ΡΠ²ΠΎΠΈΡ
ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡ
(ΠΈ, Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅, Π½Π° ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΌ ΡΠΎΠ΄ΠΈΡΠ΅Π»Π΅ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°). ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Ρ
ΡΠΊΠΎΠ² constructor
ΠΈ willDestroy
Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ
Glimmer. ΠΠΎΡΠ½Π΅Π²ΠΎΠΉ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ _Π΄ΠΎΠ»ΠΆΠ΅Π½_ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ didInsertElement
, Π½ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° {{did-insert}}
.
Π ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ {{did-insert}}
/ {{did-update}}
Π΄Π»Ρ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°Ρ
DOM. ΠΠ½ΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π½ΠΈΡ
ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΈΡ
ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌΡ Π·Π°ΠΏΡΡΠΊΡ, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ, Π΅ΡΠ»ΠΈ Ρ
ΠΎΡΠΈΡΠ΅, ΠΈ ΠΎΠ½ΠΈ ΡΠΎΠΆΠ΅ ΡΠΌΠΎΠ³ΡΡ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
ΠΡΡΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΡΠ²ΡΠ·Π°Π½, ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ Glimmer - Β«Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°Β», ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΡΡΠΎΠΌΡ, Π² Π°Π΄Π΄ΠΎΠ½Π΅ ember-google-maps
. ΠΡΠΎ ΡΠΎ, ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΡΠ΅ΠΆΠ΅ (ΠΌΡ Π½Π°ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅), ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ Π»ΠΈΠ±ΠΎ ΡΠ΅ΡΠ΅Π· MutationObserver
Π΄Π»Ρ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΡ Π·Π° DOM, ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π· Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΡΡΡΠΊΠΈ didUpdate
/ didRender
. Π― Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ <RenderDetector>
Π±ΡΠ» Π±Ρ Ρ
ΠΎΡΠΎΡΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΡΡΠΈΠΌΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π» Π±Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π½Π° ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ, Π»Π΅Π³ΠΊΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅.
@pzuraq ΡΡΠΎ Π±ΡΠ»ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, Π½ΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π² ΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ. Π ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ Π½Π΅ ΠΌΠΎΠ³Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΡΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅Ρ DOM. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΎΠΉ glimmer, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π»ΠΎΠ²ΡΡΠΊΡ didUpdate.
@nickschot, ΠΌΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°. ΠΠΎΠΌΠΎΡΠ½ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΈ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ useEffect
Π² React, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π½Π°ΠΊΠΎΠΌΡ (ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΡ
ΠΎΠΆΠΈ Π½Π° useLayoutEffect
).
ΠΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ API Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠ»Π°ΡΡΠΎΠ² Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΠ΅, Π² ΠΈΠ΄Π΅Π°Π»Π΅ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ API-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Ρ Π΄ΡΠΌΠ°Ρ (ΠΏΠ»ΡΡ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²Π²Π΅ΡΡΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΡ, ΡΡΠΎΠ±Ρ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ), Π½ΠΎ ΡΠ΅ΠΊΡΡΠΈΠΉ API Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π°ΡΡ Π²Π°ΠΌ Π²ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ Π»ΡΠ±ΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π°ΠΌ Π½ΡΠΆΠ½Ρ.
@pzuraq ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ? ΠΡΠΆΠ½ΠΎ Π»ΠΈ Π½Π°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ Π»ΡΠ±ΠΎΠΉ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊ?
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠ°ΠΊΠΎΠΉ?
{{concat (did-insert this.myAction)}}
ΠΡΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, Π° Π½Π΅ Π½Π° Β«ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅Β».
ΠΠ»ΠΈ Π²Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ²? Π§ΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅:
{{my-did-insert this.myAction}}
ΠΡΠ»ΠΈ Π΄Π°, ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ. Π’Π΅ΠΊΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ API ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° ΠΊΠ»Π°ΡΡΠ° ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ compute
ΠΈ recompute
, Π½ΠΈΡΠ΅Π³ΠΎ ΠΎ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠΌ ΡΠΈΠΊΠ»Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°.
ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π·Π° Π³Π»ΡΠΏΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ, Π½ΠΎ Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Ember ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π·Π°Π³Π°Π΄ΠΎΡΠ½ΡΠΉ, Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΈ ΡΠ°Π·ΡΠΎΠ·Π½Π΅Π½Π°.
ΠΠ»ΠΈ Π²Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ²?
Π‘ΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π²Π΅ΡΠ½ΠΎ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠΎΠ³ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ember-render-helpers , ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠΈΡΠΈΡΡΠ΅Ρ @ember/render-modifiers
API.
ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, compute
Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π² ΡΠ°Π±Π»ΠΎΠ½ / Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠ· Π΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ Π² 3.13+.
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ {{did-insert}}
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ:
export default class didInsert extends Helper {
compute(fn) {
if (!this.rendered) {
fn();
this.rendered = true;
}
}
}
Π Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΠ΅ΡΡ, Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΎΡΠ°ΡΠΎΠ²ΡΠ²Π°ΡΡΠΈΠΌ ΠΈ Π·Π°Π³Π°Π΄ΠΎΡΠ½ΡΠΌ. ΠΡΠΎ ΠΏΡΠΈΡΠΎΠ΄Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π±ΡΡΡ Π½Π° ΠΏΠ΅ΡΠ΅Π΄ΠΎΠ²ΠΎΠΉ / ΠΊΠ°Π½Π°ΡΠ΅Π΅ΡΠ½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Π΅ Π²Π΅ΡΠ΅ΠΉ, ΠΌΡ Π΅ΡΠ΅ Π½Π΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π»ΠΈ Π²ΡΠ΅ Π½ΠΎΠ²ΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ, ΠΈ ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Π½Π°Π΄ ΡΡΠΈΠΌ π
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΊΡΡΡΠ° ΡΠ΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Octane ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ π
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
@dbbk Π‘Π°ΠΌΠ°Ρ Π±ΠΎΠ»ΡΡΠ°Ρ ΠΏΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°ΠΌ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ
{{...attributes}}
Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ΅Π½ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ, ΠΊΠ°ΠΊ Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ ΡΠΈΠ³ΡΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ, ΠΈ Π½Π° ΡΠ΅ΡΡΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΌΠ΅Π½ΡΡΠ΅, ΠΊΠ°Π·Π°Π»ΠΎΡΡ, Π»Π΅Π³ΡΠ΅ Π²Π²ΠΎΠ΄ΠΈΡΡ ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΌΠ½ΠΎ.Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΡΡΠ°Π²ΠΈΡΡ Π»ΡΠ΄Π΅ΠΉ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΡΡΠΎ
attributes
ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ - Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΄Π΅Π»Π°ΡΡ<SomeComponent something={{attributes}} />
, ΡΡΠΎ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΡΠΎΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ, ΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΠ·ΠΈΡΠΈΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ.ΠΡΠ»ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΏΡΠΈΠ½ΡΡΡ ΠΊΠ°ΠΊ
@arguments
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΡΠ°Π±Π»ΠΎΠ½Π°, ΡΠ°ΠΊ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ...
spread Π² Handlebars, Π½ΠΎ ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Ρ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅ΠΉ Π΄ΠΎΡΠΎΠΆΠ½ΠΎΠΉ ΠΊΠ°ΡΡΠ΅. ΠΠ΅ ΡΠ΄ΠΈΠ²Π»ΡΡΡ, Π΅ΡΠ»ΠΈ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΌΡ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ...attributes
Π½Π°{{...@attributes}}
ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π² ΡΡΠΎΠΌ ΡΠΎΠ΄Π΅.@ Gaurav0 API ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Glimmer Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡΡ ΡΠ΅ΡΠ΅Π· RFC-ΠΏΡΠΎΡΠ΅ΡΡ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π±ΡΠ΄Π΅Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Ember, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ Π·Π°Ρ ΠΎΡΠΈΠΌ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ. Π ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ ΠΊ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΡ Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π΅ΡΡΡ ΠΎΠ΄Π½Π° ΠΏΡΠΈΡΡΠ½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ: ΠΌΡ Π½Π΅ ΠΊΠ°Π½ΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅ΠΌ API Β«ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΡΒ», Π½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌ ΡΠΎΡΠ΅Π²Π½ΠΎΠ²Π°ΡΡΡΡ ΠΏΠΎ ΡΠ²ΠΎΠΈΠΌ Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ²Π°ΠΌ ΡΠ΅ΡΠ΅Π· ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ Π½Π°Π΄ΡΡΡΠΎΠ΅ΠΊ.
@ Turbo87 ΠΡΠ»ΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ Π΄ΠΎΠ±Π°Π²Π»Ρ Π² ΡΠΏΠΈΡΠΎΠΊ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΊ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π½ΠΎΠ²ΡΠΌ API.
Π― ΠΎΠ±ΡΠ°ΡΡΡΡ ΠΊ ΡΠ»ΡΡΠ°Ρ
didReceiveAttrs()
ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Ρ ΠΏΠΎΠ΄Π½ΡΠ»ΠΈ Π΅Π³ΠΎ. ΠΠ±ΡΡΠ½ΠΎ Π»ΡΠ΄ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΡ Π»ΠΎΠ²ΡΡΠΊΡ, ΡΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Π½ΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΠ·ΡΡΠ΄Π½ΡΡ ΡΠ°ΡΡΡ Π½Π΅Π½ΡΠΆΠ½ΠΎΠ³ΠΎ Π² ΡΡΠΈΡ Ρ ΡΠΊΠ°Ρ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ. Π, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, Π»ΡΠ΄ΠΈ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΡΠΎΠ²Π΅ΡΡΠ°ΡΡ ΡΠΎΠΊΠΈΡΡΡΡΠΈΠ΅ Π²Π΅ΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΈΡ Ρ ΡΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π½Π° Π³ΠΎΡΡΡΠ΅ΠΌ ΠΏΡΡΠΈ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°.ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Β«Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π½ΠΈΡΒ» Π½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Β«Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²ΡΡΡΠ³ΠΈΠ²Π°Π½ΠΈΡΒ». ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ. ΠΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ. ΠΡΠΈΠΌΠ΅Ρ:
ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ:
Π‘Π΄Π΅Π»Π°ΠΉ ΡΡΠΎ:
ΠΡΠΈΠ·Π½Π°ΡΡΡ, Ρ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΊΠ΅ΠΏΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠ½ΠΎΡΠΈΠ»ΡΡ ΠΊ ΡΡΠΎΠΌΡ, Π½ΠΎ @wycats ΡΠ±Π΅Π΄ΠΈΠ» ΠΌΠ΅Π½Ρ, ΠΈ ΠΏΠΎ ΠΌΠΎΠ΅ΠΌΡ ΠΎΠΏΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Glimmer.js Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π³ΠΎΠ΄ ΠΈΠ»ΠΈ ΠΎΠΊΠΎΠ»ΠΎ ΡΠΎΠ³ΠΎ, ΠΌΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡ Ρ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ
didReceiveAttrs
ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΡ ΡΠ²ΠΎΠΉΡΡΠ².