Ember.js: [рдореЗрдЯрд╛] рдХрдврд╝рд╛рдИ рд░реЗрдбреАрдиреЗрд╕

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рдЕрдЧре░ 2020  ┬╖  17рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: emberjs/ember.js

рдЖрдЬ, рд╕рдВрдЧрддрддрд╛ рдореЛрдб рдореЗрдВ рдХрдврд╝рд╛рдИ рдирдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдФрд░ рдХрдИ рдореМрдЬреВрджрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред staticComponents , рдореЛрдб рдореЗрдВ Embroider рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ, рдЬреЛ splitAtRoutes рдореЛрдб рдХрд╛ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдПрдореНрдмреНрд░рд╛рдпрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░ рдЕрдВрдХ # 501 рдПрдореНрдмреНрд░реЗрдпрд░ рд░рд┐рд▓реАрдЬ рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдореНрдмреНрд░реЙрдЗрдб рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╢реЗрд╖ рдореБрджреНрджреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЙрди рдЪрд░рдгреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддреА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рдордХреНрд╖ рдЙрдард╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдХрд┐ рдорд╛рд░реНрдЧ-рдЖрдзрд╛рд░рд┐рдд рдХреЛрдб рд╡рд┐рднрд╛рдЬрди ("рдХрдврд╝рд╛рдИ рддрддреНрдкрд░рддрд╛") рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд░реНрдерд┐рдд рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдПрдореНрдмреНрд░рд╛рдпрд░ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдПрдореНрдмрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдмрдХрд┐ Embroider рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рджрд╛рдиреЗрджрд╛рд░ рддрд░реАрдХреЗ рд╣реИрдВ (рдПрдХ рд╕рдВрдЧрддрддрд╛ рдореЛрдб рд╕рд╣рд┐рдд, рдЬреЛ рдХреБрдЫ рдареЛрд╕ рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдореНрдмреНрд░рд╛рдпрд░ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ), рдпрд╣ рдореБрджреНрджрд╛ рд╕рд╛рдорд╛рдиреНрдп Emr Application рдХреЗ рд╕рд╛рде Embroider рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ рдФрд░ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдорд╛рд░реНрдЧ-рдЖрдзрд╛рд░рд┐рдд рдХреЛрдб рд╡рд┐рднрд╛рдЬрди рд╕реЗред

рддрдХрдиреАрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ

Embroider README рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдорд╛рд░реНрдЧ-рдЖрдзрд╛рд░рд┐рдд рдХреЛрдб рд╡рд┐рднрд╛рдЬрди ( splitAtRoutes ) рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЗрди рдЭрдВрдбреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

  • [] staticAddonTestSupportTrees
  • [] staticAddonTrees
  • [] staticHelpers
  • [] staticComponents

рдЕрдЧрд░ рдХреЛрдИ рдлрд╝рдВрдбрди рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрди рдЭрдВрдбреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╡реЗ "рдХреНрд▓рд╛рд╕рд┐рдХ рдбрд╛рдпрдирд╛рдорд┐рдХ рдлреАрдЪрд░реНрд╕" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

MVP: (component dynamicString) рдХрдореА рдФрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

Embroider рддрддреНрдкрд░рддрд╛ ("MVP") рдХреЗ рдкрд╣рд▓реЗ рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдЖрдо рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╣рдордиреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реНрдерд┐рд░ рдЭрдВрдбреЗ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдкрд╛рдпрд╛ рд╣реИред

рдПрдорд╡реАрдкреА рдореАрд▓ рдХреЗ рдкрддреНрдерд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рднреА рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХ рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рд▓рдХреНрд╖реНрдп рд╣реИ рдЬреЛ рдЗрди рдЭрдВрдбреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд▓рдХреНрд╖реНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП splitAtRoutes рд▓рд┐рдП рдПрдХ рдЙрдЪрд┐рдд рд╕рдВрдХреНрд░рдордг рдорд╛рд░реНрдЧ рд╣реИ, рдФрд░ рдпрд╣ рдХрд┐ рдЙрд╕ рдореЛрдб рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд, рдЧреИрд░-рддреБрдЪреНрдЫ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмреНрд▓реВрдкреНрд░рд┐рдВрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рдПрдбреЛрди рдХреНрд▓рд╛рд╕рд┐рдХ рдХреНрд▓рд╛рд╕рд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рджреВрд░ рдЪрд▓реЗ рдЧрдП рд╣реЛрдВрдЧреЗред рдЗрд╕рдХрд╛ рдЕрд░реНрде рдпрд╣ рднреА рд╣реИ рдХрд┐ рдРрд╕реЗ рдРрдбреЛрди рдЬреЛ рдЕрдХреНрд╕рд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдПрдореНрдмрд░ рдХрдВрд╕реАрд▓рд░, рдХреНрд▓рд╛рд╕рд┐рдХ рдбрд╛рдпрдирд╛рдорд┐рдХ рдлреАрдЪрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

staticComponents

рдпрд╣ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реНрдерд┐рд░ рдЭрдВрдбрд╛ рд╣реИ , рдФрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдПрдорд╡реАрдкреА рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдзрд╛ рд╣реИред

staticComponents рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди ( рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╣рд┐рдд ) (component dynamicString) рдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧреЛрдВ рд╕реЗ рдореБрдХреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдЙрдирдХреЗ рдРрдбрдСрди рдХреЛ (component "static string") staticComponents рдореЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреИрдЯрд░реНрди рд╕реЗ рджреВрд░ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

{{#let (component this.componentName) as | Component |}}

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдирдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рддрд╛рд░ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдШрдЯрдХреЛрдВ рдХреЛ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕ рдРрдбрдСрди рдХреЛ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рдШрдЯрдХ рдХреЛ рдЖрдкреВрд░реНрддрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╛рдВрдЯреЗрджрд╛рд░ рд╕реНрдерд┐рддрд┐ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ this.component рдХреЛ this.componentName = <code i="29">scaffolding/${dasherize(csId!)}/${dasherize(this.args.feature)}</code> рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐ рдареАрдХ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рд╕рдВрдХреНрд░рдордг рд░рдгрдиреАрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдФрд░ рдзреНрдпрд╛рди рд╕реЗ рд╕реЛрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдХрдо рд╕реЗ рдХрдо, рдПрдбреЛрдиреЛрдВ рдХреЛ (component dynamicString) рд╕реЗ рджреВрд░ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ component рдХреАрд╡рд░реНрдб рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рдЧрддрд┐рд╢реАрд▓ рдШрдЯрдХреЛрдВ рдХреЗ рдЖрд╣реНрд╡рд╛рди рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рдореЗрдВ рдПрдХ рдмрдЧ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдПрдВрдЧрд▓-рдмреНрд░реИрдХреЗрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдШрдЯрдХ рдЖрд╣реНрд╡рд╛рди рдХреЛ рдбрд╛рдпрдирд╛рдорд┐рдХ component рдХреАрд╡рд░реНрдб рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕реЗ рдЬрд▓реНрдж рд╣реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдмрд╛рд░ рдЬрдм рд▓реЛрдЧ (component dynamic) рд╕реЗ рдкрд▓рд╛рдпрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд▓рдЧрддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдЧрд▓рддреА рд╕реЗ <dynamic> рдкрд▓рд╛рдпрди рдХрд░реЗрдВрдЧреЗ, рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВред

рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЖрдЗрдЯрдо:

  • [] (component) рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░реЗрдВ рдФрд░ рдЬрд╛рд░реА рдХрд░реЗрдВ рдЬреЛ рдХреЗрд╡рд▓ рд╕реНрдЯреИрдЯрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (рдЗрд╕рдХреЗ рд▓рд┐рдП RFC рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)
  • [] рдмрдЧ рдХреЛ рдареАрдХ рдХрд░реЗрдВ рдЬреЛ рдХреЛрдг рдмреНрд░реИрдХреЗрдЯ рдХреЗ рдЖрд╣реНрд╡рд╛рди рдХреЛ рдПрдореНрдмрд░ (рдмрдЧрд┐рдлреНрдЯ, рд╢рд╛рдпрдж рдПрдХ рдЕрдВрддрд░рдВрдЧ рд░реВрдк рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рдШрдЯрдХ рдЖрд╣реНрд╡рд╛рди) рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ

staticHelpers

staticHelpers рдзреНрд╡рдЬ рдПрдореНрдмрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд▓реЛрдбрд░ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдЧреАред

рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдПрдореНрдмрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝реЗрдЧрд╛, рд▓реЗрдХрд┐рди staticComponents рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╕рдорд╕реНрдпрд╛рдПрдВред рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ MVP рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП staticHelpers рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ splitAtRoutes рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╡рд╛рд╕ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдирдП рдПрдкреАрдЖрдИ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

staticAddonTrees рдФрд░ staticAddonTestSupportTrees

рд╡рд░реНрддрдорд╛рди рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпреЗ рдЭрдВрдбреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рдПрдореНрдмрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдПрдбреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдорд╡реАрдкреА рд▓рдХреНрд╖реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдкрд░реНрдпрд╛рдкреНрдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдЕрдЧрд▓рд╛ рдХрджрдо

рдПрдорд╡реАрдкреА рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдПрдХ рдЯреНрд░реИрдХрд┐рдВрдЧ рдореБрджреНрджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдиреЗ рд░рд╣рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИред рдПрдорд╡реАрдкреА рд▓рдХреНрд╖реНрдп рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдПрдХ рдкреВрд░реНрдг рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдкреНрд░рд╡рд╛рд╕рди рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдФрд░ рдЧрддрд┐рд╢реАрд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рдЬреЛ рдХреЛрдб рд╡рд┐рднрд╛рдЬрди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВ)ред рдЦрд╛рдХрд╛ рдЖрдпрд╛рдд рдЗрди рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@NullVoxPopuli @jherdman рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛!

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд▓реЛрдЧреЛрдВ рдХреЛ (component dynamicString) рдмрдЬрд╛рдп рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдпрд╣ рд╕реЛрдЪрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд╣реАрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП import рдпрд╛ (component "staticString") рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред

рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • рдШрдЯрдХ рдХрд╛ рдХреЙрд▓рд░ (component "staticString")
  • рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЗ рд╕рд╛рде рдХреЛрдб рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдЧрд╛, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдбрд╛рд▓ рджреЗрдЧрд╛, рдФрд░ рдЖрдкрдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (get componentMap dynamicString) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

рдЕрдм рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ: (get components dynamicString) рдХрд┐рд╕реА рднреА (component dynamicString) рд╕реЗ рдмреЗрд╣рддрд░ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдпрд╣ рд╣реИ рдХрд┐ componentMap рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд╣реАрдВ рдФрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛, рдФрд░ рдирд┐рдпрдо рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред

рддреЛ рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдк рдПрдХ рдШрдЯрдХ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ <InputField @type="text" /> рдпрд╛ <InputField @type="checkbox" /> (рдЬреИрд╕реЗ <input> HTML рдореЗрдВ) рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

input-field рд▓рд┐рдП рдЖрдкрдХрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

{{#let (hash text=(component "inputs/text-field") checkbox=(component "inputs/checkbox")) as |components|}}
  {{component (get components @type)}}
{{/let}}

рдЬрдм рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХрдврд╝рд╛рдИ рдпрд╣ рджреЗрдЦ рд╕рдХрддреА рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрдВрдбрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рдШрдЯрдХреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдерд╛:

{{component (concat "inputs/" <strong i="33">@type</strong> "-field")}}

(рд╣рд╛рдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЗрдВ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдЖрдо рд╣реИрдВ)

рдлрд┐рд░ рдПрдореНрдмреНрд░рд╛рдпрдбрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрди рдШрдЯрдХреЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдмрдВрдбрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдФрд░ рднреА рдмрджрддрд░ рд╣реИ рдпрджрд┐ рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд╛рдо (рдЬреЛ рднреА рдмрд╣реБрдд рдЖрдо рд╣реИ) рдХрд┐рдпрд╛ рдерд╛:

export default class extends Component {
  get innerComponent() {
    return `inputs/${this.args.type}-field`;
  }
}

рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде:

{{component this.innerComponent}}

рдпрд╣ рдПрдХ рдЫреЛрдЯрд╛ рдореЛрдбрд╝ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдврд╝рд╛рдИ рдХреЗ рд▓рд┐рдП рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдШрдЯрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рд╕рднреА 17 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╕рдВрдХреНрд░рдордг рдХреА рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдбрдСрди рдХреЛ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рд╕рдВрдХреЗрдд рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдП рдХрд┐ рдЙрдирдХреЗ рдХреМрди рд╕реЗ рддрд░реНрдХ рдШрдЯрдХ рдХреЗ рдХреЙрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдПрдХ рд╕реНрдерд┐рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред

рдПрдХ рд╕реНрдкрд┐рдЯрдмреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ (рдЬрд╣рд╛рдВ better-component рд╕реНрдерд┐рд░ рдШрдЯрдХ рдХреАрд╡рд░реНрдб рдХреЗ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рд╣реИ)ред

{{better-component <strong i="8">@arg</strong> staticString=true}}

рдЗрд╕рд╕реЗ рдПрдбрдСрди рдХреЛ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖ "рдбрд╛рдпрдиреЗрдорд┐рдХ рдЗрдирд╡реЛрдХреЗрд╢рди" рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдХреЙрд▓рд░ рд╕реНрдЯреИрдЯрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рддрд╛ рд╣реИред

рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдпрд╣ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧрддрд┐рд╢реАрд▓ рдШрдЯрдХ рдорд╛рдорд▓реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╣реИрдВ, рд╕реАрдзреЗ рд╕реНрдЯреНрд░реЗрдЯ-рдлреЙрд░рд╡рд░реНрдб "рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЙрдЬрд┐рдХ рдЯреВ рдПрдСрдиреЛрди" рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИред

Idk рдЕрдЧрд░ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╖рдп рдкрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдордп-рд╕рдордп рдкрд░ emberclear рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдереИрддрд┐рдХрддрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореБрджреНрджреЛрдВ рдФрд░ рдЙрдирдХреЗ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдПрдХ рдкреЗрдкрд░ рдЯреНрд░реЗрд▓ рд░рдЦ рд░рд╣рд╛ рд╣реВрдВред

https://github.com/NullVoxPopuli/emberclear/pull/784

рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рд▓реЛрдЧ рдореБрджреНрджреЛрдВ рдкрд░ рднрд╛рдЧрддреЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рдЕрдмреЗ рдкреНрд░рд▓реЗрдЦрди рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ? idk

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдХрдврд╝рд╛рдИ рдХреЗ рд▓рд┐рдП рд╕реБрдкрд░ рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реВрдВ, рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдбрд╝реА рдпреЛрдЬрдирд╛рдПрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣рд╛рд╕рд┐рд▓ рдХреА рд╣реИрдВ
https://github.com/emberjs/rfcs/issues/611

рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рд╡рд┐рддрд░рдг рдкреНрд░рдгрд╛рд▓реА рд╣реИред рд╕рд╛рдордЧреНрд░реА рдирд┐рд░реНрдорд╛рддрд╛ "рдЧрддрд┐рд╡рд┐рдзрд┐ рддрддреНрд╡реЛрдВ" рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдПрдХ рд╕рдВрдЧрдд рдПрдореНрдмрд░ рдШрдЯрдХ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдПрдореНрдмрд░ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рджрд┐рд▓ рдХрдореЛрдмреЗрд╢ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

// example model definition
export default class TextElement extends Model {
  _componentName = 'text-element';
}
  {{#each (sort-by "position" @activityElements) as |activityElement|}}
    {{component (get activityElement "_componentName")}}

рдЙрдкрд░реЛрдХреНрдд рдореЗрд░реЗ рдкрдврд╝рдиреЗ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ (component dynamicString) рдкрд░рд┐рджреГрд╢реНрдп рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╣реИ?

рдЙрдкрд░реЛрдХреНрдд рдореЗрд░реЗ рдкрдврд╝рдиреЗ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ (рдШрдЯрдХ рдбрд╛рдпрдирд╛рдорд┐рдХрд╕реНрдЯреНрд░рд┐рдВрдЧ) рдкрд░рд┐рджреГрд╢реНрдп рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╣реИ?

@activityElements рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд╣рд╛рдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

рдпрд╣ рдПрдХ рдПрдореНрдмрд░ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдШрдЯрдХ рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд╣рдордиреЗ рдбрд╛рдпрдиреЗрдорд┐рдХ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕, FYI рдореЗрдВ рднреА рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рдирд┐рд╡реЗрд╢ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдпрд╣рд╛рдВ рдкреВрдЫрд╛ рдерд╛: https://discuss.emberjs.com/t/the-perils-of-dynamic-component-invocation/16784ред

рддреЛ рд╣рдо рдХрд░рддреЗ рд╣реИред рд╣рдо рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдЙрди рдШрдЯрдХреЛрдВ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдРрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рд╡реЗ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдмреИрдарддреЗ рд╣реИрдВ (рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдмрдирд╛рддрд╛ рд╣реИ), рдмреИрдХрдПрдВрдб рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлреНрд░рдВрдЯрдПрдВрдб рдкрд░ рдСрди-рдбрд┐рдорд╛рдВрдб рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдбрд╛рдпрдиреЗрдорд┐рдХ component рд╣реЗрд▓реНрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░ рдкрд╛рдирд╛ рдЙрд╕реА рддрд░рд╣ рд╣реИ рдЬреИрд╕реЗ рдХрд┐рд╕реА рдПрд░реЗ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рди рд╣реЛрдирд╛ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рд╣реИред рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЛрдб рдмрдВрдЯрд╡рд╛рд░реЗ / рдкреЗрдбрд╝ рдХреЗ рд╣рд┐рд▓рдиреЗ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рдЕрдЧрд░ рдореЗрд░рд╛ рдРрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд╣ рдЧрддрд┐рд╢реАрд▓рддрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЙрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╕рднреА рд╡реИрдз рдШрдЯрдХреЛрдВ рдХреЗ рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

{{#let (hash
   Foo=(import 'path/to/foo')
   Etc=...
) as |validComponents|
}}
  {{component (get validComponents @someDynamicValue)}}
{{/let}}

?

рдЬреИрд╕реЗ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреВрд░реНрдг рдЧрддрд┐рд╢реАрд▓ рдШрдЯрдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдХреНрдпрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рд╕реВрдЪреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдореЗрдВ рднреА рдХреНрдпрд╛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред "рдУрд╣, рдпрд╣ рдорд╛рди рд╡реИрдз рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рдерд╛"

рдХреНрдпрд╛ рдЙрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╕рднреА рд╡реИрдз рдШрдЯрдХреЛрдВ рдХреЗ рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧрд╛ред

@NullVoxPopuli @jherdman рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛!

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд▓реЛрдЧреЛрдВ рдХреЛ (component dynamicString) рдмрдЬрд╛рдп рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдпрд╣ рд╕реЛрдЪрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд╣реАрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП import рдпрд╛ (component "staticString") рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред

рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • рдШрдЯрдХ рдХрд╛ рдХреЙрд▓рд░ (component "staticString")
  • рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЗ рд╕рд╛рде рдХреЛрдб рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдЧрд╛, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдбрд╛рд▓ рджреЗрдЧрд╛, рдФрд░ рдЖрдкрдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (get componentMap dynamicString) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

рдЕрдм рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ: (get components dynamicString) рдХрд┐рд╕реА рднреА (component dynamicString) рд╕реЗ рдмреЗрд╣рддрд░ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдпрд╣ рд╣реИ рдХрд┐ componentMap рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд╣реАрдВ рдФрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛, рдФрд░ рдирд┐рдпрдо рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред

рддреЛ рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдк рдПрдХ рдШрдЯрдХ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ <InputField @type="text" /> рдпрд╛ <InputField @type="checkbox" /> (рдЬреИрд╕реЗ <input> HTML рдореЗрдВ) рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

input-field рд▓рд┐рдП рдЖрдкрдХрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

{{#let (hash text=(component "inputs/text-field") checkbox=(component "inputs/checkbox")) as |components|}}
  {{component (get components @type)}}
{{/let}}

рдЬрдм рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХрдврд╝рд╛рдИ рдпрд╣ рджреЗрдЦ рд╕рдХрддреА рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрдВрдбрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рдШрдЯрдХреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдерд╛:

{{component (concat "inputs/" <strong i="33">@type</strong> "-field")}}

(рд╣рд╛рдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЗрдВ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдЖрдо рд╣реИрдВ)

рдлрд┐рд░ рдПрдореНрдмреНрд░рд╛рдпрдбрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрди рдШрдЯрдХреЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдмрдВрдбрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдФрд░ рднреА рдмрджрддрд░ рд╣реИ рдпрджрд┐ рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд╛рдо (рдЬреЛ рднреА рдмрд╣реБрдд рдЖрдо рд╣реИ) рдХрд┐рдпрд╛ рдерд╛:

export default class extends Component {
  get innerComponent() {
    return `inputs/${this.args.type}-field`;
  }
}

рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде:

{{component this.innerComponent}}

рдпрд╣ рдПрдХ рдЫреЛрдЯрд╛ рдореЛрдбрд╝ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдврд╝рд╛рдИ рдХреЗ рд▓рд┐рдП рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдШрдЯрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдореИрдВ рджреЛ рдЕрдиреНрдп рдЗрди-рдлрд╝реНрд▓рд╛рдЗрдЯ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рд╡рд░реНрддрдиреА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

  1. рдЯреЗрдореНрдкрд▓реЗрдЯ рдЖрдпрд╛рдд
  2. рдШрдЯрдХ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЗрдирд╡реЛрдХрдмрд▓реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдпрджрд┐ рд╣рдо рдЙрди рджреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ:

---
import TextField from "./text-field";
import Checkbox from "./checkbox";
---
{{#let (hash text=TextField checkbox=Checkbox) as |components|}}
  {{component (get components @type)}}
{{/let}}

рдЗрд╕рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рдпрдо рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдЪреНрдЫреА рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдПрдореНрдмреНрд░реЛрдЗрдбрд░реНрд╕ рдХреЛ рд╕рдордЭрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдХреЛ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдФрд░ рднреА рдЕрдзрд┐рдХ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдШрдЯрдХ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЗрдирд╡реЛрдХрдмрд▓реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

RFC # 481 рдХреЗ рдмрд╛рдж рд╕реЗ, рдПрдХ рдШрдЯрдХ рд╡рд░реНрдЧ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрддреНрдо-рдирд┐рд╣рд┐рдд рдЗрдХрд╛рдИ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдЬреЛ рдПрдХ рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреНрд▓рд┐рдорд░ рд╡реАрдПрдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдиреЛрдЯ: рдпрд╣ рдЙрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ рдЬреЛ @ember/component рдпрд╛ @glimmer/component рд╕реЗ рд╡рд╛рд░рд┐рд╕ рд╣реИрдВред рдЖрд░рдПрдлрд╕реА 481 рдХреЗ рдмрд╛рдж рд╕реЗ, рдПрдореНрдмрд░ рдХреА "рдШрдЯрдХ" рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ "рдПрдХ рд╡рд╕реНрддреБ рд╣реИ рдЬреЛ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдФрд░ рдШрдЯрдХ рдкреНрд░рдмрдВрдзрдХ рд╕реЗ рдЬреБрдбрд╝реА рд╣реИ", рдЬрд┐рд╕рдореЗрдВ рд╣реБрдХ-рдШрдЯрдХреЛрдВ рдЬреИрд╕реЗ рдХрд╕реНрдЯрдо рдШрдЯрдХ рд╢рд╛рдорд┐рд▓

рдЪреВрдВрдХрд┐ RFC # 432 (рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕рд╣рд╛рдпрдХ рдФрд░ рд╕рдВрд╢реЛрдзрдХ) рдФрд░ RFC # 496 (рд╣реИрдВрдбрд▓рдмрд╛рд░ рд╕рдЦреНрдд рдореЛрдб), рдПрдореНрдмрд░ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИ: рд╕рд╣рд╛рдпрдХ, рдШрдЯрдХ рдпрд╛ рд╕рдВрд╢реЛрдзрдХ рдпреБрдХреНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рд╣рд╛рдпрдХ, рдШрдЯрдХ рдпрд╛ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдордВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕реНрд╡реАрдХреГрдд RFC рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдпрд╣ рд╣реИ рдХрд┐ <SomeComponentClass /> (рдпрд╛ <this.componentClass> рдЬрд╣рд╛рдБ this.componentClass рдПрдХ рдШрдЯрдХ рд╡рд░реНрдЧ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрддрд╛ рд╣реИ) "рдмрд╕ рдХрд╛рдо рдХрд░реЗрдЧрд╛"ред рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд░рд┐рдХреЙрд░реНрдб рдХреА рдпреЛрдЬрдирд╛ рднреА рд╣реИред

рдХрд╣рд╛ рдХрд┐, рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдирдпрд╛ RFC рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред

рдПрдЪрдмреАрдПрд╕ рдореЗрдВ рдорд╛рдиреНрдп рдШрдЯрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдпреБрдЧрд▓ рдХреЛ рдмрд╛рд╣рд░ рдмреБрд▓рд╛рдП рдЬрд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ:

  1. рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рд╣рдо JS рд╕рдорд╛рдзрд╛рди @wycats рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдПрдЪрдмреАрдПрд╕ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдЪрдмреАрдПрд╕ рдореЗрдВ рддрд░реНрдХ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред рдпрд╣ рднреА рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП _much_ рдХрдард┐рди рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рджрд╛рддрд╛ рдШрдЯрдХ рд╕рд╣реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╣реА рдШрдЯрдХ рдХреА рдкреИрджрд╛рд╡рд╛рд░ рджреЗрддрд╛ рд╣реИред
  2. рдпрд╣ рдЬреЗрдПрд╕ (рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╡реИрд╕реЗ рднреА) рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд▓рд╛рдн рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдпрд╣рд╛рдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

    {{#let (lookup-directory "components/inputs/") as |components|}}
    {{/let}}
    

    рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬ рдХреЛ рд╕рдордп рдХреЗ рд╕рд╛рде рдмрдирд╛рдП рд░рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рдЖрдкрдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕рд╛рде рд╕рдореВрд╣реАрдХреГрдд рдкреЙрд▓реАрдореЙрд░реНрдлрд┐рдХ рдкреНрд░рдХрд╛рд░ рдЬреНрдЮрд╛рдд рд╣реЛред

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧрддрд┐рд╢реАрд▓ рдШрдЯрдХреЛрдВ рдХреЛ рдЗрд╕, feel рдХреЛ рд▓реЗрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдореБрджреНрджреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧрддрд┐рд╢реАрд▓ рдШрдЯрдХреЛрдВ рдХреЛ рдЗрд╕, feel рдХреЛ рд▓реЗрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдореБрджреНрджреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рдФрд░ рдЖрд░рдПрдлрд╕реА рд░реЗрдкреЛ рдореЗрдВ рд╢реАрдШреНрд░ рд╣реА рдПрдХ рдХреЛ рдЦреЛрд▓реЗрдВрдЧреЗ, рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рд▓рд┐рдВрдХ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВрдЧреЗред

@mehulkar @wycats @jherdman рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЕрджреГрд╢реНрдп рдШрдЯрдХреЛрдВ рдХреА рдЕрдкрдиреА рд╕реВрдЪреА рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ? рдПрдХ рд╕рд╣рд╛рдпрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрддрд░ рд╢рд╛рдорд┐рд▓ рд╣реИред

import Component1 from './dynamic/component-1';
import Component2 from './dynamic/component-2';
import Component3 from './dynamic/component-3';

export default class extends Component {
  get innerComponent() {
    switch(this.args.type) {
      case 'one':
        return Component1;
      case 'two':
        return Component2;
      case 'three':
        return Component3;
      default:
        // handle invalid type
    }
  }
}

рддрдм рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ: {{#let (component this.innerComponent) as |DynamicComponent|}} рдпрд╛ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХрд╛ред

рдореИрдВ рдмрд╣реБрдд рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдХрд┐ рдЖрд╕рд╛рди рдЦреЛрдЬ / рд░реАрдб / рдПрдирд╛рд▓рд┐рд╕рд┐рд╕ рд╣реЛ, рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрддрд╛ рд▓рдЧ рд╕рдХреЗ рдХрд┐ рдЗрди рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд╡рд┐рдЪрд╛рд░?

@ рдЙрддреНрдХреГрд╖реНрдЯ рд╣рд╛рдБ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдПрдЪрдмреАрдПрд╕ рдореЗрдВ рд╕рд╣рд╛рдпрдХ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ-рдХреЗрд╡рд▓ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

@ рд╕рдорд╕рд╛рдордпрд┐рдХ рдореВрд▓ рд░реВрдк рд╕реЗ рдЬреЛ рдореИрдВрдиреЗ рдирд┐рдХрдЯ-рдЕрд╡рдзрд┐ рдХреЗ рдирд┐рд░реНрдзрд╛рд░рдг (рдЯреЗрдореНрдкрд▓реЗрдЯ рдЖрдпрд╛рдд рд╕реЗ рдкрд╣рд▓реЗ) рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред

рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдШрдЯрдХ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЗрдирд╡реЛрдХреЗрдмрд▓ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рд╣реЛрдЧреА, рдЬреЛ рдХрд┐ рдореИрдВ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдЪрд▓реЛ рдЗрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ!

рдЖрд╣, рдХрд┐ рдХреЗрд╡рд▓ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЧрд▓рдд рд╕рдордЭ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ :)ред рдореБрдЭреЗ рднреА рдХреЗрд╡рд▓ рдШрдЯрдХреЛрдВ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкрд╕рдВрдж рд╣реИ:

---
import TextField from "./text-field";
import Checkbox from "./checkbox";
---
{{#let (hash text=TextField checkbox=Checkbox) as |components|}}
  {{component (get components @type)}}
{{/let}}

рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рд╢рд╛рдпрдж рдпрд╣ рдХреЗрд╡рд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдФрд░ рдЬреЗрдПрд╕ рд╕рдорд░реНрдерд┐рдд рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдХрд┐ рдЯреАрдо рдХреЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкрдврд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

artcommacode picture artcommacode  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

SaladFork picture SaladFork  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

omarestrella picture omarestrella  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dfreeman picture dfreeman  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

srsgores picture srsgores  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ