μ€λλ Embroider in compatibility modeλ μλ‘μ΄ μμ© νλ‘κ·Έλ¨κ³Ό λ§μ κΈ°μ‘΄ μμ© νλ‘κ·Έλ¨μμ μ¬μ©ν μ μμ΅λλ€. splitAtRoutes
λͺ¨λμ μ΄μ μ μ»κΈ° μν΄ νμν staticComponents
λͺ¨λμμ Embroiderλ₯Ό μ¬μ©νλ κ²μ΄ λ μ΄λ ΅μ΅λλ€.
Embroider μ μ₯μμ Issue # 501 μ Ember.js 릴리μ€μ μΌλΆλ‘ Embroiderλ₯Ό μμ ννλ λ° νμν λλ¨Έμ§ λ¬Έμ λ₯Ό μΆμ ν©λλ€.
μ΄ λ¬Έμ λ μ¬λλ€μ΄ κ²½λ‘ κΈ°λ° μ½λ λΆν ( "μμ μ€λΉ")κ³Ό ν¨κ» μ§μλλ μ΅μ μΌλ‘ Embroiderμ ν¨κ» Emberλ₯Ό μ€μ λ‘ μ¬μ©νκΈ° μ μ μ·¨ν΄μΌ ν λ¨κ³λ₯Ό μΆμ ν©λλ€. Embroiderλ₯Ό μ¬μ©νλ λ°©λ²μ μ¬λ¬ κ°μ§κ° μμ§λ§ (ꡬ체μ μΈ μ΄μ μ κ±°μ μ 곡νμ§ μμ§λ§ κΈ°λ³Έμ μΌλ‘ Ember μ체λ₯Ό Embroiderλ‘ λ§μ΄κ·Έλ μ΄μ νλ λ° μ€μν νΈνμ± λͺ¨λλ₯Ό ν¬ν¨νμ¬)μ΄ λ¬Έμ λ μΌλ° Ember μμ© νλ‘κ·Έλ¨κ³Ό ν¨κ» Embroiderλ₯Ό μ¬μ©νκ³ μ΄μ μ μ»λ κΈ°λ₯μ μ€μ μ λ‘λλ€. κ²½λ‘ κΈ°λ° μ½λ λΆν μμ.
Embroider READMEμ μ€λͺ
λλλ‘ κ²½λ‘ κΈ°λ° μ½λ λΆν ( splitAtRoutes
)μ νμ±ννλ €λ©΄ μ ν리μΌμ΄μ
μμ λ€μ νλκ·Έλ₯Ό νμ±ν ν μ μμ΄μΌν©λλ€.
staticAddonTestSupportTrees
staticAddonTrees
staticHelpers
staticComponents
μ λμ¨ λλ μμ© νλ‘κ·Έλ¨μ΄ μ΄λ¬ν νλκ·Έκ°μλ μνμμ μλ ν μμλ κ²½μ° "ν΄λμ λμ κΈ°λ₯"μ μ¬μ©νλ κ²μ λλ€.
(component dynamicString)
μ€λ¨ λ° κ΅μ²΄μμ μ€λΉ ( "MVP")μ 첫 λ²μ§Έ λͺ©νλ₯Ό μν΄ μ€μ μ ν리μΌμ΄μ μμ μ μ νλκ·Έλ₯Ό νμ±ννλ €κ³ ν λ λ°κ²¬ ν κ°μ₯ μΌλ°μ μΈ μ₯μ λ¬Όμ μ κ±°ν΄μΌν©λλ€.
MVP λ§μΌμ€ν€μ κ²½μ° λͺ¨λ μνκ³ μ λμ¨μ΄ μ΄λ¬ν νλκ·Έλ₯Ό μ§μνλ κ²μ λͺ©νκ° μλλλ€ .
λμ , λͺ©νλ μμ© νλ‘κ·Έλ¨μ΄ splitAtRoutes
λ‘μ ν©λ¦¬μ μΈ μ ν κ²½λ‘λ₯Ό κ°κ³ ν΄λΉ λͺ¨λμμ μ€μ§μ μ΄κ³ μ¬μνμ§ μμ μμ© νλ‘κ·Έλ¨μ λΉλ ν μ μλλ‘νλ κ²μ
λλ€. μ¦, κΈ°λ³Έ Blueprintμ ν¬ν¨ λ λͺ¨λ μ λμ¨μ ν΄λμ λμ κΈ°λ₯μμ λ§μ΄κ·Έλ μ΄μ
ν΄μΌν©λλ€. λν Ember λμμ±κ³Ό κ°μ μ€μ μμ© νλ‘κ·Έλ¨μμ μμ£Ό μ¬μ©λλ μ λμ¨μ κ³ μ μ μΈ λμ κΈ°λ₯μ μ¬μ©ν΄μλ μλ©λλ€.
staticComponents
μ΄κ²μ κ°μ₯ μ€μν μ μ νλκ·Έ μ΄λ©° μꡬ μ¬νμ MVP λμμ κ°μ₯ ν° μ₯μ λ¬Όμ΄λ©λλ€.
staticComponents
λ₯Ό νμ±ννλ €λ©΄ μ ν리μΌμ΄μ
( μ λμ¨ ν¬ν¨ )μμ (component dynamicString)
λ₯Ό λͺ¨λ μ¬μ©νμ§ μμμΌν©λλ€.
μ€μν κ²μ, μμ© νλ‘κ·Έλ¨ λ° μ λμ¨μ μ¬μ©ν μ μμ΅λλ€ (component "static string")
μ staticComponents
λͺ¨λ.
μ€μ λ‘ μ΄λ λ€μ
{{#let (component this.componentName) as | Component |}}
νμ¬ κ³΅μ© APIμ μΌλΆλ‘ λ¬Έμμ΄μ μ¬μ©νλ μ λμ¨μ λμ κ΅¬μ± μμλ₯Ό κ°μ ΈμμΌν©λλ€. μ¦,μ΄ μ λμ¨μ μ¬μ©μ κ° λ¬Έμμ΄μ΄ μλ νΈμΆ ν κ΅¬μ± μμλ₯Ό μ 곡ν΄μΌνλ μ κ·Ό λ°©μμΌλ‘ λ§μ΄κ·Έλ μ΄μ ν΄μΌν©λλ€.
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
νλκ·Έλ Ember ν
νλ¦Ώμ ννλ ₯μ κ°μ μν€μ§λ μμ§λ§, μμ© νλ‘κ·Έλ¨ λμ°λ―Έμ μ 체 λͺ©λ‘μ λ‘λμ λͺ¨λ μ§ν©μμ μ¬μ©ν μ μμμ μλ―Έν©λλ€.
μ΄κ²μ΄ Ember μμ© νλ‘κ·Έλ¨μ μν₯μ λ―ΈμΉ κ²μ΄λΌκ³ κ°μ νμ§λ§ staticComponents
λ³΄λ€ ν¨μ¬ μ μ λ¬Έμ κ° μμ΅λλ€. νμ¬ staticHelpers
μ΄ MVP λμμ μν₯μ λ―ΈμΉ κ²μΌλ‘ μμνμ§ μμ§λ§ μμ© νλ‘κ·Έλ¨μ splitAtRoutes
λ‘ μ
κ·Έλ μ΄λνλ €κ³ μλν¨μ λ°λΌ λ³κ²½ λ μ μμ΅λλ€. μ΄ κ²½μ° λ¬Έμ κ°μλ μ¬μ© μ¬λ‘λ₯Ό νκ°νκ³ λ§μ΄κ·Έλ μ΄μ
μ μ©μ΄νκ²νλ μλ‘μ΄ APIλ₯Ό κ³ λ €ν΄μΌν©λλ€.
staticAddonTrees
λ° staticAddonTestSupportTrees
νμ¬ κ°μ μ μ΄λ¬ν νλκ·Έκ° λλΆλΆμ κ΄μ©μ μΈ Ember μ± λ° μ λμ¨κ³Ό νΈνλλ―λ‘ MVP λμμ μꡬ μ¬νμ λν΄ μ€μ§μ μΈ λ¬Έμ λ₯Ό μΌμΌν€μ§ μλλ€λ κ²μ λλ€.
μ΄ λ¬Έμ λ MVP λͺ©νλ₯Ό λ¬μ± ν νμλ μΆμ λ¬Έμ λ‘ λ¨μ μμ΅λλ€. MVP λμ μ΄νμλ μμ ν μμ½ μμ€ν λ§μ΄κ·Έλ μ΄μ μ μ΄μ§νκ³ λμ μ¬μ© μ¬λ‘μ μΈμ²΄ 곡νμ κ°μ ν΄μΌν©λλ€ (μ½λ λΆν μ λν μ§μ μ μ§). ν νλ¦Ώ κ°μ Έ μ€κΈ° λ μ΄λ¬ν λͺ©νλ₯Ό λ¬μ±νλ λ° λμμ΄ λ μ μμ΅λλ€.
μ ν λΉμ©μ μ€μ΄λ ν κ°μ§ λ°©λ²μ μ λμ¨μ΄ κ΅¬μ± μμ νΈμΆμκ° μ λ¬ν μ μ λ¬Έμμ΄μ ν΄λΉνλ μΈμλ₯Ό μ μ μΌλ‘ νμνλλ‘ νμ©νλ κ²μ λλ€.
μ€νλ³Όλ‘ ( better-component
λ μ μ κ΅¬μ± μμ ν€μλμ μ΄λ¦μ λν μ리 νμ μμ
λλ€).
{{better-component <strong i="8">@arg</strong> staticString=true}}
μ΄λ κ²νλ©΄ μ λμ¨μ΄ νΉμ "λμ νΈμΆ"μ΄ νΈμΆμ κ° μ μ λ¬Έμμ΄μ μ 곡νλ κ²½μ°μλ§ μλ ν¨μ λνλΌ μ μμ΅λλ€.
λ§μ λμ κ΅¬μ± μμ μ¬λ‘κ° μ€μ λ‘ "μ λμ¨μ μ λ¬ λ λ¬Έμμ΄ μΈμ"λ‘ μΈν΄ λ°μνλ κ²½μ°μλ§μ΄ μμ μ μνν΄μΌν©λλ€.
μ΄κ²μ΄μ΄ λ¬Έμ μ λν μ£Όμ λΌλ©΄ Idkμ΄μ§λ§, λλ μ£ΌκΈ°μ μΌλ‘ emberclearμ λν μμ ν μ 체μ±μ νμ νλ €κ³ λ Έλ ₯νκ³ μμΌλ©° λ¬Έμ μ ν΄κ²°μ± μ λν λ¬Έμ μΆμ μ μ μ§ν΄ μμ΅λλ€.
https://github.com/NullVoxPopuli/emberclear/pull/784
κ·Έλ λ€λ©΄ μ¬λλ€μ΄ λ¬Έμ μ λΆλͺνλ©΄ Abe λ¬Έμκ° λμμ΄ λ μ μμ΅λκΉ? Idk
λν μμμ λ§€μ° ν₯λΆνκ³ μμΌλ©°, μμ ν μ μ μ΄ λ¬μ±λλ©΄ μ΄λ―Έ ν° κ³νμ κ°μ§κ³ μμ΅λλ€.
https://github.com/emberjs/rfcs/issues/611
μ°λ¦¬μ μμ© νλ‘κ·Έλ¨μ λμ μ½ν μΈ μ λ¬ μμ€ν μ λλ€. μ½ν μΈ μ μμλ "νλ μμ"μμ μ½ν μΈ λ₯Ό 쑰립ν©λλ€. κ° μμμλ ν΄λΉνλ Ember κ΅¬μ± μμκ° μμΌλ©° κ·Έ μ΄λ¦μ Ember λ°μ΄ν° λͺ¨λΈμ μ μλμ΄ μμ΅λλ€. μ΄ μμ€ν μ ν΅μ¬μ λ€μκ³Ό κ°μ΅λλ€.
// 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)
μλ리μ€μμ μμ¬ν©λλ€. μ νν©λκΉ?
μμ λ΄μ©μ μ½μμ λ μ΄κ²μ΄ (κ΅¬μ± μμ dynamicString) μλ리μ€μμ μμ¬ν©λλ€. μ νν©λκΉ?
@activityElements
μ 무μμ΄λ©° μ΄λμ μ μλμ΄ μμ΅λκΉ?
μ΄κ²μ 컨νΈλ‘€λ¬ κ΅¬μ± μμμ μ λ¬ λ Ember λ°μ΄ν° λͺ¨λΈ μΈμ€ν΄μ€μ λ°°μ΄μ
λλ€.
λν λμ κ΅¬μ± μμ FYIμ μ½κ°μ ν¬μλ₯Όνμ΅λλ€. μλ μ https://discuss.emberjs.com/t/the-perils-of-dynamic-component-invocation/16784 μμ μ¬κΈ°μ λν΄ λ¬Όμμ΅λλ€
μ°λ¦¬λ κ·Έλ. μ°λ¦¬λ λ§ κ·Έλλ‘ μ±μμ μ¬μ©ν κ΅¬μ± μμλ₯Ό 미리 μμ§ λͺ»ν©λλ€. λ°μ΄ν°λ² μ΄μ€μ μ μ₯λμ΄ (λ¬Όλ‘ λ³κ²½ κ°λ₯νκ² ν¨) λ°±μλμμ μ»΄νμΌλκ³ μμ²μ νλ°νΈ μλλ‘ μ μ‘λ©λλ€. μ°λ¦¬λ₯Ό μν΄ λμ component
λμ°λ―Έλ₯Ό μ¬μ©ν μ μλ€λ κ²μ λ°°μ΄μ λν΄ for-eachλ₯Ό μν ν μμλ κ²κ³Ό κ°μ΅λλ€. λλ μ λ§λ‘ μ΄μ κ°μ μ¬μ© μ¬λ‘μ λν΄ μμΌλ‘ λμκ° λ°©λ²μ΄ μκΈ°λ₯Ό λ°λλλ€. νμν μ λμ±μ΄ μκΈ° λλ¬Έμ λ΄ μ±μ΄ μλνμ§ μμΌλ©΄ μ½λ λΆν / νΈλ¦¬ νλ€λ¦Όμ λν΄ νμ€ν μ κ²½ μ°μ§ μμ κ²μ
λλ€.
ν΄λΉ μλ리μ€μ μ ν¨ν λͺ¨λ κ΅¬μ± μμμ 맡μ μ¬μ©ν μ μμ΅λκΉ?
μλ₯Ό λ€λ©΄ :
{{#let (hash
Foo=(import 'path/to/foo')
Etc=...
) as |validComponents|
}}
{{component (get validComponents @someDynamicValue)}}
{{/let}}
?
λ§μ°¬κ°μ§λ‘, μ±μμλ νλͺ© λ§ λ λλ§ ν μ μκΈ° λλ¬Έμ μ 체 λμ κ΅¬μ± μμλ₯Ό κ°μ§ μ μμ΅λλ€. λ λλ§ ν νλͺ©μ μ ννλ λͺ©λ‘μ λ§λλ κ²λ λλ²κΉ μλ λμμ΄λ©λλ€. "μ,μ΄ κ°μ μ ν¨ν κ΅¬μ± μμ μ€ νλκ° μλλλ€."
ν΄λΉ μλ리μ€μ μ ν¨ν λͺ¨λ κ΅¬μ± μμμ 맡μ μ¬μ©ν μ μμ΅λκΉ?
μ΄κ²μ νμ€ν μ°λ¦¬μ μ¬μ© μ¬λ‘λ₯Ό λ€λ£° κ²μ λλ€.
νΈμ λ΄μ κ°κΈ°
μΌλ°μ μΌλ‘ μ¬λλ€μ΄ (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}}
μ΄λ° μμΌλ‘ μ½λλ₯Ό μμ±νλ©΄ Embroiderλ λ²λ€μ λ κ°μ κ΅¬μ± μμ λ§ ν¬ν¨νλ©΄λλ€λ κ²μ μ μ μμ΅λλ€. λ€μκ³Ό κ°μ΄ μμ± νμ΅λκΉ?
{{component (concat "inputs/" <strong i="33">@type</strong> "-field")}}
(μ, κ·Έλ° κ²λ€μ λλκ²λ μΌλ°μ μ λλ€)
Embroiderλ μ½λλ₯Ό μ½κ² λΆμνκ³ λ²λ€μ ν¬ν¨λ κ΅¬μ± μμλ₯Ό μ ν ν μ μμ΅λλ€. λΉμ μ (λν λ§€μ° μΌλ°μ μ΄λ€) μλ° μ€ν¬λ¦½νΈμμ μΌμ ν κ²½μ°μ λ μ νμ λλ€ :
export default class extends Component {
get innerComponent() {
return `inputs/${this.args.type}-field`;
}
}
μ΄ ν νλ¦ΏμΌλ‘ :
{{component this.innerComponent}}
μ½κ°μ μ‘°μ μ΄μ§λ§ Embroiderκ° μ€μ λ‘ μ¬μ©λλ κ΅¬μ± μμλ₯Ό κ²°μ ν μ μμ΅λλ€.
λν λ€λ₯Έ λ κ°μ§ κΈ°λ΄ κΈ°λ₯μ λν μ°κ²°μ λ μμΈν μ€λͺ νκ³ μΆμ΅λλ€.
μ΄ λ κΈ°λ₯μ μ¬μ©νμ¬ μ΄μ μμ λ₯Ό λ€μ μμ±νλ©΄ λ€μκ³Ό κ°μ΅λλ€.
---
import TextField from "./text-field";
import Checkbox from "./checkbox";
---
{{#let (hash text=TextField checkbox=Checkbox) as |components|}}
{{component (get components @type)}}
{{/let}}
μ΄κ²μ Embroiderκ° μ΄ν΄ν΄μΌ ν νΉλ³ν κ·μΉμ μ κ±°νκ³ λͺ¨λμ λν μ½λ λΆν μμν μ¬μ©μ λͺ¨λΈμ λ§λλ μ’μ μμ±μ κ°μ§κ³ μμ΅λλ€.
RFC # 481 μ΄νλ‘ κ΅¬μ± μμ ν΄λμ€λ Glimmer VMμ΄ κ΅¬μ± μμλ‘ νΈμΆνλ λ° νμν λͺ¨λ μ 보λ₯Ό ν¬ν¨νλ μμ ν λ 립λ λ¨μμμ΅λλ€.
μ°Έκ³ : μ΄λ
@ember/component
λλ@glimmer/component
μμ μμ λ ν΄λμ€μλ§ ν΄λΉλλ κ²μ μλλλ€. RFC 481 μ΄ν Emberμ "κ΅¬μ± μμ"μ μλ "ν νλ¦Ώ λ° κ΅¬μ± μμ κ΄λ¦¬μμ κ΄λ ¨λ κ°μ²΄"μ΄λ©° νν¬ κ΅¬μ± μμμ κ°μ μ¬μ©μ μ§μ κ΅¬μ± μμλ₯Ό ν¬ν¨
RFC # 432 (λ¬Έλ§₯ λμ°λ―Έ λ° μμ μ) λ° RFC # 496 (νΈλ€ λ° μ격 λͺ¨λ) μ΄ν Ember ν νλ¦Ώ ꡬ문μ λ―Έλλ₯Όμν μ€κ³λ λ€μκ³Ό κ°μ΅λλ€. λμ°λ―Έ, κ΅¬μ± μμ λλ μμ μλ₯Ό ν¬ν¨νλ ννμμ λμ°λ―Έ, κ΅¬μ± μμ λλ μμ μλ‘ νΈμΆ ν μ μμ΅λλ€.
μΉμΈ λ RFCλ νμ¬ μ»¬λ μ
μ μλ―Έλμ΄λ€ <SomeComponentClass />
(λλ <this.componentClass>
κ²½μ° this.componentClass
κ΅¬μ± μμ ν΄λμ€λ‘ νμΈ) "λ¨μ§ μν"κ². ꡬν μμ
μ λν κΈ°λ‘ κ³νμ΄κΈ°λν©λλ€.
μ¦, λͺ νμ±μ μν΄μ΄ λμμ λͺ μ μ μΌλ‘ μ§μ νλ μ RFCλ₯Ό λ§λ€μ΄μΌν©λλ€.
HBSμμ μ ν¨ν κ΅¬μ± μμ λͺ©λ‘μ μ΄λκ°μ μ§μ νλ κ²μ κ°λ₯νμ§λ§ λ€μκ³Ό κ°μ λͺ κ°μ§μ£Όμ μ¬νμ΄ μμ΅λλ€.
μ΄κ²μ JS (μ΄μ¨λ κ³΅κ° API ν¬ν¨) afaikμλ μ‘΄μ¬νμ§ μμ§λ§ μ¬κΈ°μλ λλ ν 리 ꡬ쑰λ₯Ό μ΄μ μΌλ‘ μ¬μ©νλ κ²μ΄ λ§€μ° μ’μ΅λλ€. μ :
{{#let (lookup-directory "components/inputs/") as |components|}}
{{/let}}
μ΄λ° μ’ λ₯μ κ²μ λλ ν 리 ꡬ쑰λ³λ‘ κ·Έλ£Ήν λ λ€νμ± μ νμ μκ³ μλ€λ©΄ μκ°μ΄ μ§λ¨μ λ°λΌ μ μ§ κ΄λ¦¬κ° λ μ¬μ μ§ μ μμ΅λλ€.
μ΄μ¨λ λλ λμ κ΅¬μ± μμ κ°μ΄ λ¬Έμ λ₯Ό λμ ν기보λ€λ λ ΌμνκΈ° μν΄ μ체 λ¬Έμ κ° νμνλ€κ³ μκ°ν©λλ€ π π
μ΄μ¨λ λλ λμ κ΅¬μ± μμ κ°μ΄ λ¬Έμ λ₯Ό λμ ν기보λ€λ λ ΌμνκΈ° μν΄ μ체 λ¬Έμ κ° νμνλ€κ³ μκ°ν©λλ€ π π
λμνλ©° RFC 리ν¬μ§ν 리μμ 곧 νλλ₯Ό μ΄κ³ μ¬κΈ°μ λ§ν¬λ₯Ό κ²μν©λλ€.
@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|}}
λλ μ΄μ μ μ¬ν μμ
μ μν ν μ μμ΅λλ€.
λ μ½κ² κ²μ / μ½κΈ° / λΆμνκ³ μ΄λ¬ν κ΅¬μ± μμκ° μ¬μ©λλ μμΉλ₯Ό μ½κ² κ°μ§νλ μ΄μ κ°μ κ²μ μ νΈν©λλ€. μκ°?
@ Samsinite λ€, κ·Έκ² μμ΄λμ΄λΌκ³ μκ°ν©λλ€. HBSμ λμ°λ―Έλ λλΆλΆ ꡬ문 μ€νμ΄λ©° ν νλ¦Ώ μ μ© κ΅¬μ± μμμ μ μ©ν©λλ€.
@Samsinite λ κΈ°λ³Έμ μΌλ‘ λ¨κΈ° μμ μΌλ‘ μ μν κ²μ λλ€ (ν νλ¦Ώ κ°μ Έ μ€κΈ° μ ).
μ»΄ν¬λνΈ ν΄λμ€ κ° νΈμΆ κ°λ₯νλλ‘ νμ©ν΄μΌνλλ°, μ΄κ²μ΄ μ κ°μ΄ μ£Όμ μμ μ΄μΌκΈ° ν κ²μ λλ€.
κ°μ!
μ, ν νλ¦Ώ μ μ© κ΅¬μ± μμμλ μλ―Έκ° μμ΅λλ€. μ€ν΄ν΄μ μ£μ‘ν©λλ€. :). λν λ€μμ ν νλ¦Ώ μ μ© κ΅¬μ± μμμ λν ꡬ문μ μ’μν©λλ€.
---
import TextField from "./text-field";
import Checkbox from "./checkbox";
---
{{#let (hash text=TextField checkbox=Checkbox) as |components|}}
{{component (get components @type)}}
{{/let}}
μ¬μ€, λλ νμ λ€λ₯Έ μ¬λλ€μ΄ λ μ½κ² μ½μ μ μλ€κ³ μκ°νλ κ²μ λ°λΌ ν νλ¦Ώκ³Ό js μ§μ κ΅¬μ± μμμλ§ μ¬μ©ν κ²μ λλ€.
κ°μ₯ μ μ©ν λκΈ
νΈμ λ΄μ κ°κΈ°
μΌλ°μ μΌλ‘ μ¬λλ€μ΄
(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
λν ν νλ¦Ώμ λ€μκ³Ό κ°μ΅λλ€.μ΄λ° μμΌλ‘ μ½λλ₯Ό μμ±νλ©΄ Embroiderλ λ²λ€μ λ κ°μ κ΅¬μ± μμ λ§ ν¬ν¨νλ©΄λλ€λ κ²μ μ μ μμ΅λλ€. λ€μκ³Ό κ°μ΄ μμ± νμ΅λκΉ?
(μ, κ·Έλ° κ²λ€μ λλκ²λ μΌλ°μ μ λλ€)
Embroiderλ μ½λλ₯Ό μ½κ² λΆμνκ³ λ²λ€μ ν¬ν¨λ κ΅¬μ± μμλ₯Ό μ ν ν μ μμ΅λλ€. λΉμ μ (λν λ§€μ° μΌλ°μ μ΄λ€) μλ° μ€ν¬λ¦½νΈμμ μΌμ ν κ²½μ°μ λ μ νμ λλ€ :
μ΄ ν νλ¦ΏμΌλ‘ :
μ½κ°μ μ‘°μ μ΄μ§λ§ Embroiderκ° μ€μ λ‘ μ¬μ©λλ κ΅¬μ± μμλ₯Ό κ²°μ ν μ μμ΅λλ€.