ãã§ãã¯ããã¯ã¹ã®ãªã¹ããšããŠã¬ã³ããªã³ã°ããŠããtrue / false / undefinedå€ã®é
åããããŸãã
é
åèŠçŽ ãtrueã«ããŸãã¯trueããå€æŽãããšããã§ãã¯ããã¯ã¹ã®ãªã¹ããåã¬ã³ããªã³ã°ããã次ã®ïŒindex + 1ïŒãã§ãã¯ããã¯ã¹ãå€æŽããããã§ãã¯ããã¯ã¹ãšãšãã«å€æŽãç¶æ¿ããŸãã
ã³ãŒãïŒ
{{#each range as |value idx|}}
<label><input type="checkbox" checked={{value}} {{action makeChange idx on="change"}}>{{idx}}: {{value}}</label><br/>
{{/each}}
{{#each range key="@index" as |value idx|}}
ã䜿çšãããšãæ£ããæ©èœããŸãã
ãã€ãã«ïŒ https ïŒ
@andrewtimberlakeã¯ã {{#each range key="@index" as |value idx|}}
ã䜿çšããããšã§åé¡ãåé¿ã§ããããã§ãã
ãããããã°ã®ããã«èŠããŸãã key
ã¯å¥ã®ç®çã®ããã®ãã®ã§ãã httpsïŒ//www.emberjs.com/api/ember/release/classes/Ember.Templates.helpers/methods/ifïŒanchor =å
ç§ã¯ããã§äœãèµ·ãã£ãŠããã®ãç¥ã£ãŠãããšæããŸãã ããã¯æ··ä¹±ã®ðã§ãããç§ã¯ããã説æããããšããŸãã å€ãã®ãšããžã±ãŒã¹ïŒå¢çç·ã®ãŠãŒã¶ãŒãšã©ãŒïŒãããã«å¯äžããŸãããããã°ã§ãããã©ããããããã®ãããããä¿®æ£ããæ¹æ³ãšæ¹æ³ãããããããŸããã
ãŸãã key
ãã©ã¡ãŒã¿ãŒã{{#each}}
äœããããã説æããå¿
èŠããããŸãã TL; DR DOMãæåããäœæããã®ã§ã¯ãªããæ¢åã®DOMãåå©çšããããšããã€ãã©ã®ããã«æå³ãããããå€æããããšããŠããŸãã
ç§ãã¡ã®ç®çã®ããã«ããDOMãžã®ã¿ãããïŒããšãã°ãããã¹ãããŒãã®ã³ã³ãã³ããå±æ§ã®æŽæ°ãã³ã³ãã³ãã®è¿œå ãŸãã¯åé€ãªã©ïŒã¯ã³ã¹ããããããå¯èœãªéãåé¿ããå¿ èŠãããããšãåæãšããŠåãå ¥ããŸãããã
ããªãåçŽãªãã³ãã¬ãŒãã«çŠç¹ãåœãŠãŸãããã
<ul>
{{#each this.names as |name|}}
<li>{{name.first}} {{to-upper-case name.last}}</li>
{{/each}}
</ul>
this.names
ã...
[
{ first: "Yehuda", last: "Katz" },
{ first: "Tom", last: "Dale" },
{ first: "Godfrey", last: "Chan" }
]
ãã®åŸãããªãã¯åŸãã§ããã...
<ul>
<li>Yehuda KATZ</li>
<li>Tom DALE</li>
<li>Godfrey CHAN</li>
</ul>
ãããŸã§ã¯é 調ã§ããã
ã§ã¯ããªã¹ãã«{ first: "Andrew", last: "Timberlake" }
ãè¿œå ãããšã©ããªãã§ããããã ãã³ãã¬ãŒãã次ã®DOMãçæããããšãæåŸ
ããŸãã
<ul>
<li>Yehuda KATZ</li>
<li>Tom DALE</li>
<li>Godfrey CHAN</li>
<li>Andrew TIMBERLAKE</li>
</ul>
ãããã_ã©ã®ããã«_ïŒ
{{#each}}
ãã«ããŒãå®è£
ããæãåçŽãªæ¹æ³ã¯ããªã¹ãã®ã³ã³ãã³ããå€æŽããããã³ã«ããªã¹ãã®ãã¹ãŠã®ã³ã³ãã³ããã¯ãªã¢ããããšã§ãã ãããè¡ãã«ã¯ãå°ãªããšã23åã®æäœãå®è¡ããå¿
èŠããããŸãã
<li>
ããŒããåé€ããŸã<li>
ããŒããæ¿å
¥ããŸãto-upper-case
ãã«ããŒã4ååŒã³åºãããã¯...éåžžã«äžå¿ èŠã§é«äŸ¡ãªããã§ãã æåã®3ã€ã®é ç®ã¯å€æŽãããŠããªãããšãããã£ãŠããã®ã§ããããã®è¡ã®äœæ¥ãã¹ãããã§ããã°äŸ¿å©ã§ãã
ããè¯ãå®è£
ã¯ãæ¢åã®è¡ãåå©çšããäžèŠãªæŽæ°ãè¡ããªãããšã§ãã 1ã€ã®ã¢ã€ãã¢ã¯ãè¡ããã³ãã¬ãŒãå
ã®äœçœ®ãšåçŽã«äžèŽãããããšã§ãã ããã¯åºæ¬çã«key="@index"
ãè¡ãããšã§ãã
{ first: "Yehuda", last: "Katz" }
ãæåã®è¡<li>Yehuda KATZ</li>
æ¯èŒããŸããto-upper-case
ãã«ããŒãå床åŒã³åºãå¿
èŠããªãããšãããã£ãŠããŸãããããã£ãŠããã®ãã«ããŒïŒ "KATZ"ïŒã®åºåãããããŸãã ïŒ_also_ã¯å€æŽãããªãã£ãã®ã§ãããã§ã¯äœãããŸãã<li>
ããŒããæ¿å
¥ããŸãto-upper-case
ãã«ããŒãåŒã³åºããŸãïŒ "Timberlake"-> "TIMBERLAKE"ïŒãã®ããããã®å®è£ ã§ã¯ãæäœã®ç·æ°ã23ãã5ã«æžãããŸããïŒðæ¯èŒã®ã³ã¹ããæã§æ¯ã£ãŠããŸãããç§ãã¡ã®ç®çã§ã¯ãä»ã®æäœãšæ¯èŒããŠæ¯èŒçå®äŸ¡ã§ãããšæ³å®ããŠããŸãïŒã æªããªãã
ããããä»ããªã¹ãã«{ first: "Andrew", last: "Timberlake" }
ãè¿œå ãã代ããã«ã代ããã«è¿œå ããå Žåã¯ã©ããªãã§ããããã ãã³ãã¬ãŒãã次ã®DOMãçæããããšãæåŸ
ããŸãã
<ul>
<li>Andrew TIMBERLAKE</li>
<li>Yehuda KATZ</li>
<li>Tom DALE</li>
<li>Godfrey CHAN</li>
</ul>
ãããã_ã©ã®ããã«_ïŒ
{ first: "Andrew", last: "Timberlake" }
ãæåã®è¡<li>Yehuda KATZ</li>
æ¯èŒããŸããto-upper-case
ãã«ããŒãå床åŒã³åºããŸã{ first: "Yehuda", last: "Katz" }
ã2çªç®ã®è¡<li>Tom DALE</li>
ãå¥ã®3ã€ã®æäœãšæ¯èŒããŸã{ first: "Tom", last: "Dale" }
ã2çªç®ã®è¡<li>Godfrey CHAN</li>
ãå¥ã®3ã€ã®æäœãšæ¯èŒããŸã<li>
ããŒããæ¿å
¥ããŸãto-upper-case
ãã«ããŒãåŒã³åºããŸãïŒãChanã->ãCHANãïŒããã¯14åã®æäœã§ãã çãïŒ
æŠå¿µçã«ã¯ãè¿œå ãããè¿œå ãããã«é¢ä¿ãªããé åå ã®1ã€ã®ãªããžã§ã¯ãã®ã¿ãå€æŽïŒæ¿å ¥ïŒããŠãããããããã¯äžèŠã«æããŸããã æé©ã«ã¯ãè¿œå ã·ããªãªã§è¡ã£ãã®ãšåãããã«ããã®ã±ãŒã¹ãåŠçã§ããã¯ãã§ãã
ããã§key="@identity"
ãç»å ŽããŸããé
åå
ã®èŠçŽ ã®_order_ã«äŸåãã代ããã«ãJavaScriptãªããžã§ã¯ãIDïŒ ===
ïŒã䜿çšããŸãã
{ first: "Andrew", last: "Timberlake" }
äžèŽããïŒ ===
ïŒæ¢åã®è¡ãæ€çŽ¢ããŸãã äœãèŠã€ãããªãã£ãã®ã§ãæ°ããè¡ãæ¿å
¥ïŒè¿œå ïŒããŸãã<li>
ããŒããæ¿å
¥ããŸãto-upper-case
ãã«ããŒãåŒã³åºããŸãïŒ "Timberlake"-> "TIMBERLAKE"ïŒ{ first: "Yehuda", last: "Katz" }
äžèŽããïŒ ===
ïŒæ¢åã®è¡ãæ€çŽ¢ããŸãã <li>Yehuda KATZ</li>
èŠã€ãããŸããïŒto-upper-case
ãã«ããŒãå床åŒã³åºãå¿
èŠããªãããšãããã£ãŠããŸãããããã£ãŠããã®ãã«ããŒïŒ "KATZ"ïŒã®åºåãããããŸãã ïŒ_also_ã¯å€æŽãããªãã£ãã®ã§ãããã§ã¯äœãããŸããããã§ãæé©ãª5ã€ã®æäœã«æ»ããŸãã
ç¹°ãè¿ããŸãããããã¯ðæ¯èŒãšç°¿èšã®ã³ã¹ããæã§æ¯ã£ãŠããŸãã 確ãã«ãããããç¡æã§ã¯ãªãããã®éåžžã«åçŽãªäŸã§ã¯ããããã¯äŸ¡å€ããªããããããŸããã ãããããªã¹ãã倧ãããåè¡ãè€éãªã³ã³ããŒãã³ãïŒå€ãã®ãã«ããŒãèšç®ãããããããã£ããµãã³ã³ããŒãã³ããªã©ïŒãåŒã³åºããšæ³åããŠãã ããã ããšãã°ãLinkedInã®ãã¥ãŒã¹ãã£ãŒããæ³åããŠã¿ãŠãã ããã é©åãªè¡ãšé©åãªããŒã¿ãäžèŽãããªããšãã³ã³ããŒãã³ãã®åŒæ°ã倧éã«ãã£ãŒã³ããå¯èœæ§ããããäºæ³ãããã¯ããã«å€ãã®DOMæŽæ°ãçºçããå¯èœæ§ããããŸãã ééã£ãDOMèŠçŽ ãäžèŽãããããã«ãŒãœã«äœçœ®ãããã¹ãéžæç¶æ ãªã©ã®DOMç¶æ ã倱ã£ããããããšã«ãåé¡ããããŸãã
å
šäœãšããŠãè¿œå ã®æ¯èŒãšç°¿èšã®ã³ã¹ãã¯ãå®éã®ã¢ããªã§ã¯ã»ãšãã©ã®å Žåç°¡åã«äŸ¡å€ããããŸãã key="@identity"
ã¯Emberã®ããã©ã«ãã§ãããã»ãšãã©ãã¹ãŠã®å Žåã«é©åã«æ©èœããããã {{#each}}
ã䜿çšããå Žåãéåžžã¯key
åŒæ°ã®èšå®ã«ã€ããŠå¿é
ããå¿
èŠã¯ãããŸããã
ããããåŸ ã£ãŠãã ãããåé¡ããããŸãã ãã®å Žåã¯ã©ãã§ããïŒ
const YEHUDA = { first: "Yehuda", last: "Katz" };
const TOM = { first: "Tom", last: "Dale" };
const GODFREY = { first: "Godfrey", last: "Chan" };
this.list = [
YEHUDA,
TOM,
GODFREY,
TOM, // duplicate
YEHUDA, // duplicate
YEHUDA, // duplicate
YEHUDA // duplicate
];
ããã§ã®åé¡ã¯ãåããªããžã§ã¯ããåããªã¹ãã«è€æ°å衚瀺ãããå¯èœæ§ãããããšã§ãã ããã¯ãåçŽãª@identity
ã¢ã«ãŽãªãºã ãç¹ã«ãããŒã¿ãäžèŽããæ¢åã®è¡ãæ€çŽ¢ããïŒ ===
ïŒ...ããšèšã£ãéšåãå£ããŸããããã¯ãããŒã¿ãšDOMã®é¢ä¿ã1ã®å Žåã«ã®ã¿æ©èœããŸãã ïŒ1ãããã¯ãã®å Žåã¯åœãŠã¯ãŸããŸããã ããã¯å®éã«ã¯ããããããªãããã«æããããããããŸãããããã¬ãŒã ã¯ãŒã¯ãšããŠãç§ãã¡ã¯ãããåŠçããå¿
èŠããããŸãã
ãããåé¿ããããã«ãäžçš®ã®ãã€ããªããã¢ãããŒãã䜿çšããŠãããã®è¡çªãåŠçããŸãã å éšçã«ã¯ãããŒããDOMãžã®ãããã³ã°ã¯æ¬¡ã®ããã«ãªããŸãã
"YEHUDA" => <li>Yehuda...</li>
"TOM" => <li>Tom...</li>
"GODFREY" => <li>Godfrey...</li>
"TOM-1" => <li>Tom...</li>
"YEHUDA-1" => <li>Yehuda...</li>
"YEHUDA-2" => <li>Yehuda...</li>
"YEHUDA-3" => <li>Yehuda...</li>
ã»ãšãã©ã®å Žåãããã¯éåžžã«ãŸãã§ãããçºçããå Žåãããã¯ã»ãšãã©ã®å ŽåGoodEnoughâ¢ã§æ©èœããŸãã äœããã®çç±ã§ãããæ©èœããªãå Žåã¯ããã€ã§ãããŒãã¹ïŒãŸãã¯RFC 321ã®ããã«é«åºŠãªããŒã€ã³ã°ã¡ã«ããºã ïŒã䜿çšã§ããŸãã
ãã¹ãŠã®è©±ãçµãã£ãã®ã§ãTwiddleã®ã·ããªãªãèŠãæºåãã§ããŸããã
åºæ¬çã«ã次ã®ãªã¹ãããå§ããŸããïŒ [undefined, undefined, undefined, undefined, undefined]
ã
ç¡é¢ä¿ãªæ³šæïŒ
Array(5)
ã¯[undefined, undefined, undefined, undefined, undefined]
ãšåãã§ã¯ãããŸããã ããã¯ããªããäžè¬çã«é¿ããã¹ããã®ã§ãããç©Žããé åããçæããŸãã ãã ãããç©Žãã«ã¢ã¯ã»ã¹ãããšå®éã«undefined
è¿ãããããããã®ãã°ãšã¯é¢ä¿ãããŸããã ãããã£ãŠãç§ãã¡ã®_éåžžã«çã_ç®çã®ããã ãã«ããããã¯åãã§ãã
ããŒãæå®ããªãã£ããããEmberã¯ããã©ã«ãã§@identity
ã䜿çšããŸãã ããã«ããããã¯è¡çªã§ããããã次ã®ãããªçµæã«ãªããŸããã
"undefined" => <input ...> 0: ...,
"undefined-1" => <input ...> 1: ...,
"undefined-2" => <input ...> 2: ...,
"undefined-3" => <input ...> 3: ...,
"undefined-4" => <input ...> 4: ...
ããã§ãæåã®ãã§ãã¯ããã¯ã¹ãã¯ãªãã¯ãããšããŸãã
{{action}}
修食åã«ãã£ãŠã€ã³ã¿ãŒã»ããããã makeChange
ã¡ãœããã«åãã£ã¹ããããããŸãã[true, undefined, undefined, undefined, undefined]
ãŸããDOMã¯ã©ã®ããã«æŽæ°ãããŸããïŒ
true
äžèŽããïŒ ===
ïŒæ¢åã®è¡ãæ€çŽ¢ããŸãã äœãèŠã€ãããªãã£ãã®ã§ãæ°ããè¡ãæ¿å
¥ïŒè¿œå ïŒããŸã<input checked=true ...>0: true...
undefined
äžèŽããïŒ ===
ïŒæ¢åã®è¡ãæ€çŽ¢ããŸãã <input ...>0: ...
ïŒä»¥åã¯æåã®è¡ïŒãèŠã€ãããŸããïŒ{{idx}}
ããã¹ãããŒãã1
æŽæ°ããŸãundefined
äžèŽããïŒ ===
ïŒæ¢åã®è¡ãæ€çŽ¢ããŸãã undefined
ã2åç®ã«èŠãã®ã§ãå
éšããŒã¯undefined-1
ã§ããããã <input ...>1: ...
ïŒä»¥åã¯2çªç®ã®è¡ïŒãèŠã€ãããŸããã{{idx}}
ããã¹ãããŒãã2
æŽæ°ããŸãundefined-2
ãšundefined-3
æŽæ°ããŸãundefined-4
è¡ãåé€ããŸãïŒæŽæ°åŸã«é
åå
ã®undefined
ã1ã€å°ãªããªãããïŒã ãããããã¯ããªããããããåãããšãã«ã©ã®ããã«åºåãåŸããã説æããŠããŸãã åºæ¬çã«ããã¹ãŠã®DOMè¡ã1ã€äžã«ã·ããããæ°ããè¡ãäžçªäžã«æ¿å
¥ãããæ®ãã¯{{idx}}
ãæŽæ°ãããŸãã
æ¬åœã«äºæ³å€ã®éšåã¯2.2ã§ãã æåã®ãã§ãã¯ããã¯ã¹ïŒã¯ãªãã¯ããããã§ãã¯ããã¯ã¹ïŒã1è¡äžãã£ãŠ2çªç®ã®äœçœ®ã«ç§»åãããšããŠããEmberã®checked
ããããã£ãtrue
ã«å€æŽãããŠããããšãæåŸ
ããŠããã§ãããããã€ã³ããããå€ã¯æªå®çŸ©ã§ãããããEmberããããfalse
ã«æ»ãããã§ãã¯ãå€ãããšãæåŸ
ã§ããŸãã
ããããããã¯ãããã©ã®ããã«æ©èœãããã§ã¯ãããŸããã åé ã§è¿°ã¹ãããã«ãDOMãžã®ã¢ã¯ã»ã¹ã«ã¯ã³ã¹ããããããŸãã ããã«ã¯ãDOMããã®_èªã¿åã_ãå«ãŸããŸãã æŽæ°ã®ãã³ã«ãæ¯èŒã®ããã«DOMããææ°ã®å€ãèªã¿åããªããã°ãªããªãå Žåãæé©åã®ç®çã¯ã»ãšãã©æãªãããŸãã ãããã£ãŠããããåé¿ããããã«ãDOMã«æžã蟌ãã æåŸã®å€ãèšæ¶ããDOMããèªã¿æ»ãããšãªããçŸåšã®å€ããã£ãã·ã¥ãããå€ãšæ¯èŒããŸããã éããããå Žåã«ã®ã¿ãæ°ããå€ãDOMã«æžã蟌ã¿ãŸãïŒãããŠæ¬¡åã®ããã«ãã£ãã·ã¥ããŸãïŒã ããã¯ãåããä»®æ³DOMãã¢ãããŒããå ±æãããšããæå³ã§ãããDOMå šäœã®ãããªãŒæ§ããä»®æ³åããã®ã§ã¯ãªãããªãŒãããŒãã§ã®ã¿å®è¡ããŸãã
ãããã£ãŠãTL; DRã checked
ããããã£ïŒãŸãã¯ããã¹ããã£ãŒã«ãã®value
ããããã£ãªã©ïŒãããã€ã³ãããããšãå®éã«ã¯æåŸ
ã©ããã«æ©èœããŸããã <div>{{this.name}}</div>
ãã¬ã³ããªã³ã°ãã jQuery
ãŸãã¯chromeã€ã³ã¹ãã¯ã¿ãŒã䜿çšããŠdiv
èŠçŽ ã®textContent
ãæåã§æŽæ°ããå Žåãæ³åããŠã¿ãŠãã ããã Emberãããã«æ°ã¥ãã this.name
ãæŽæ°ãããšã¯æããªãã£ãã§ãããã ããã¯åºæ¬çã«åãããšã§ãã checked
ããããã£ã®æŽæ°ã¯Emberã®å€éšã§è¡ãããããïŒãã©ãŠã¶ã®ãã§ãã¯ããã¯ã¹ã®ããã©ã«ãã®åäœãä»ããŠïŒãEmberã¯ãããèªèããŸããã
ããã{{input}}
ãã«ããŒãååšããçç±ã§ãã é¢é£ããã€ãã³ããªã¹ããŒãåºã«ãªãHTMLèŠçŽ ã«ç»é²ããæäœãé©åãªããããã£ã®å€æŽã«åæ ããŠãé¢ä¿è
ïŒã¬ã³ããªã³ã°ã¬ã€ã€ãŒãªã©ïŒã«éç¥ã§ããããã«ããå¿
èŠããããŸãã
ãããç§ãã¡ãã©ãã«æ®ãã®ãããããŸããã ãããé©ãã¹ãçç±ã¯ç解ã§ããŸãããããã¯äžé£ã®äžå¹žãªãŠãŒã¶ãŒãšã©ãŒã§ãããšèšããã¡ã§ãã ããããããããã®ããããã£ãå ¥åèŠçŽ ã«ãã€ã³ãããããšã«å¯ŸããŠãªã³ãããå¿ èŠããããŸããïŒ
é¢é£ã³ãŒãïŒ
https://github.com/emberjs/ember.js/blob/c24bc23e4139c90c8d8d96c4234d9c0c19e5c594/packages/@ember/ -internals / glimmer / lib / utils / iterable.tsïŒL390-L391
https://github.com/emberjs/ember.js/blob/c24bc23e4139c90c8d8d96c4234d9c0c19e5c594/packages/@ember/ -internals / glimmer / lib / utils / iterable.tsïŒL436-L445
https://github.com/emberjs/ember.js/blob/c24bc23e4139c90c8d8d96c4234d9c0c19e5c594/packages/@ember/ -internals / glimmer / lib / utils / iterable.tsïŒL451-L466
@ chancancode-ãã°ããã説æãããããšãã ããã¯ããã®ãããªãã¹ãŠã®ãšã©ãŒãé²ãããã«ã <input ... >
ã䜿çšããŠã¯ãªããã {{input ...}}
ã®ã¿ã䜿çšããå¿
èŠãããããšãæå³ããŸããïŒ
@ boris-petrovããã®URLãã¯ãªããããŒãã«ã³ããŒããããããªèªã¿åãå°çšããã¹ããã£ãŒã«ãã®ããã«ãåãå
¥ããããå Žåãããã€ããããŸãããŸãã¯ãå
¥åèŠçŽ + {{action}}
ã䜿çšããŠååããããšãã§ããŸãã DOMã€ãã³ããå®è¡ããããããã£ã®æŽæ°ãæåã§åæ ããŸãïŒããã¯ã @identity
è¡çªãçºçããããšãé€ããŠãtwiddleãå®è¡ããããšããããšã§ãïŒããããæç¹ã§{{input}}
åå®è£
ããŠããã ãã§ãããã§ã«åŠçãããŠãããã¹ãŠã®ãšããžã±ãŒã¹ãåŠçããŸãã ãããã£ãŠããã¹ãŠã§ã¯ãªãã«ããŠããã»ãšãã©ã®å Žåã {{input}}
䜿çšããå¿
èŠããããšèšãã®ã¯_ãããã_å
¬æ£ã ãšæããŸãã
ãã ããããŒãšã®è¡çªããããã®å Žåã¯ããŸã ãä¿®æ£ããããŠããŸããã https://ember-twiddle.com/0f2369021128e2ae0c445155df5bb034?openFiles=templates.application.hbs%2Cãåç §ããŠ
ã ããç§ã¯èšã£ããç§ã¯ããã«ã€ããŠäœããã¹ãã100ïŒ ããããªãã æå€ã§äºæ³å€ã®ããšã§ãããå®éã®ã¢ããªã§ã¯ãã®çš®ã®è¡çªã¯éåžžã«ãŸãã§ããããkeyãåŒæ°ãã«ã¹ã¿ãã€ãºã§ããã®ã¯ãã®ããã§ãïŒããã¯ãããã©ã«ãã®ã@identityãããŒã®å Žåã§ãïŒãæ©èœã¯GoodEnoughâ¢ã§ã¯ãªãããããã®æ©èœãååšããŸãïŒã
@ chancancode-ããã¯ãç§ããã°ããåã«éããå¥ã®åé¡ãæãåºãããŸãã ããã«äŒŒããããªãã®ããããšæããŸããïŒ ããã§åãåã£ãçãïŒé
åèŠçŽ ãèšå®ãããšãã«set
代ããã«replace
ã䜿çšããå¿
èŠæ§ã«ã€ããŠïŒã¯ãŸã ç§ã«ã¯å¥åŠã«æããŸãã
@ boris-petrovç§ã¯ãããé¢é£ããŠãããšã¯æããªã
ããã«ã¡ã¯ãæ®ãç«ã®ãã©ãã°å¯èœãªãªã¹ãã«ã¯sortablejsã䜿çšããŸãã plsã¯ããã®ãã¢ããã§ãã¯ããŠãååé¡ãåçŸããŸãã
ã¹ãããïŒ
ãã©ãã°ãããã¢ã€ãã ãDOMããªãŒã«ãšã©ãŸã£ãŠããããšãããããŸãã
ããããã¢ã€ãã ãä»ã®äœçœ®ïŒæåŸã®ã¢ã€ãã ã§ã¯ãªãïŒã«ãã©ãã°ãããšãããŸãããããã§ãã
æãåèã«ãªãã³ã¡ã³ã
ç§ã¯ããã§äœãèµ·ãã£ãŠããã®ãç¥ã£ãŠãããšæããŸãã ããã¯æ··ä¹±ã®ðã§ãããç§ã¯ããã説æããããšããŸãã å€ãã®ãšããžã±ãŒã¹ïŒå¢çç·ã®ãŠãŒã¶ãŒãšã©ãŒïŒãããã«å¯äžããŸãããããã°ã§ãããã©ããããããã®ãããããä¿®æ£ããæ¹æ³ãšæ¹æ³ãããããããŸããã
ã¡ãžã£ãŒð
ãŸãã
key
ãã©ã¡ãŒã¿ãŒã{{#each}}
äœããããã説æããå¿ èŠããããŸãã TL; DR DOMãæåããäœæããã®ã§ã¯ãªããæ¢åã®DOMãåå©çšããããšããã€ãã©ã®ããã«æå³ãããããå€æããããšããŠããŸããç§ãã¡ã®ç®çã®ããã«ããDOMãžã®ã¿ãããïŒããšãã°ãããã¹ãããŒãã®ã³ã³ãã³ããå±æ§ã®æŽæ°ãã³ã³ãã³ãã®è¿œå ãŸãã¯åé€ãªã©ïŒã¯ã³ã¹ããããããå¯èœãªéãåé¿ããå¿ èŠãããããšãåæãšããŠåãå ¥ããŸãããã
ããªãåçŽãªãã³ãã¬ãŒãã«çŠç¹ãåœãŠãŸãããã
this.names
ã...ãã®åŸãããªãã¯åŸãã§ããã...
ãããŸã§ã¯é 調ã§ããã
ãªã¹ãã«ã¢ã€ãã ãè¿œå ãã
ã§ã¯ããªã¹ãã«
{ first: "Andrew", last: "Timberlake" }
ãè¿œå ãããšã©ããªãã§ããããã ãã³ãã¬ãŒãã次ã®DOMãçæããããšãæåŸ ããŸãããããã_ã©ã®ããã«_ïŒ
{{#each}}
ãã«ããŒãå®è£ ããæãåçŽãªæ¹æ³ã¯ããªã¹ãã®ã³ã³ãã³ããå€æŽããããã³ã«ããªã¹ãã®ãã¹ãŠã®ã³ã³ãã³ããã¯ãªã¢ããããšã§ãã ãããè¡ãã«ã¯ãå°ãªããšã23åã®æäœãå®è¡ããå¿ èŠããããŸãã<li>
ããŒããåé€ããŸã<li>
ããŒããæ¿å ¥ããŸãto-upper-case
ãã«ããŒã4ååŒã³åºãããã¯...éåžžã«äžå¿ èŠã§é«äŸ¡ãªããã§ãã æåã®3ã€ã®é ç®ã¯å€æŽãããŠããªãããšãããã£ãŠããã®ã§ããããã®è¡ã®äœæ¥ãã¹ãããã§ããã°äŸ¿å©ã§ãã
ð@ index
ããè¯ãå®è£ ã¯ãæ¢åã®è¡ãåå©çšããäžèŠãªæŽæ°ãè¡ããªãããšã§ãã 1ã€ã®ã¢ã€ãã¢ã¯ãè¡ããã³ãã¬ãŒãå ã®äœçœ®ãšåçŽã«äžèŽãããããšã§ãã ããã¯åºæ¬çã«
key="@index"
ãè¡ãããšã§ãã{ first: "Yehuda", last: "Katz" }
ãæåã®è¡<li>Yehuda KATZ</li>
æ¯èŒããŸãã1.1ã ãã€ã§ããã===ãã€ã§ããããäœãããŸãã
1.2ã ïŒã¹ããŒã¹ã«ã¯åçããŒã¿ãå«ãŸããŠããªããããæ¯èŒã¯å¿ èŠãããŸããïŒ
1.3ã "Katz" === "Katz"ããã«ããŒã¯ "çŽç²"ã§ããããã
to-upper-case
ãã«ããŒãå床åŒã³åºãå¿ èŠããªãããšãããã£ãŠããŸãããããã£ãŠããã®ãã«ããŒïŒ "KATZ"ïŒã®åºåãããããŸãã ïŒ_also_ã¯å€æŽãããªãã£ãã®ã§ãããã§ã¯äœãããŸãã3.1ã
<li>
ããŒããæ¿å ¥ããŸã3.2ã ããã¹ãããŒããæ¿å ¥ããŸãïŒ "Andrew"ïŒ
3.3ã ããã¹ãããŒãïŒã¹ããŒã¹ïŒãæ¿å ¥ããŸã
3.4ã
to-upper-case
ãã«ããŒãåŒã³åºããŸãïŒ "Timberlake"-> "TIMBERLAKE"ïŒ3.5ã ããã¹ãããŒããæ¿å ¥ããŸãïŒ "TIMBERLAKE"ïŒ
ãã®ããããã®å®è£ ã§ã¯ãæäœã®ç·æ°ã23ãã5ã«æžãããŸããïŒðæ¯èŒã®ã³ã¹ããæã§æ¯ã£ãŠããŸãããç§ãã¡ã®ç®çã§ã¯ãä»ã®æäœãšæ¯èŒããŠæ¯èŒçå®äŸ¡ã§ãããšæ³å®ããŠããŸãïŒã æªããªãã
ãªã¹ãã®åã«ã¢ã€ãã ãè¿œå ãã
ããããä»ããªã¹ãã«
{ first: "Andrew", last: "Timberlake" }
ãè¿œå ãã代ããã«ã代ããã«è¿œå ããå Žåã¯ã©ããªãã§ããããã ãã³ãã¬ãŒãã次ã®DOMãçæããããšãæåŸ ããŸãããããã_ã©ã®ããã«_ïŒ
{ first: "Andrew", last: "Timberlake" }
ãæåã®è¡<li>Yehuda KATZ</li>
æ¯èŒããŸãã1.1ã "Andrew"ïŒ== "Yehuda"ãããã¹ãããŒããæŽæ°
1.2ã ïŒã¹ããŒã¹ã«ã¯åçããŒã¿ãå«ãŸããŠããªããããæ¯èŒã¯å¿ èŠãããŸããïŒ
1.3ã "Timberlake"ïŒ== "Katz"ã
to-upper-case
ãã«ããŒãå床åŒã³åºããŸã1.4ã ããã¹ãããŒãããKATZããããTIMBERLAKEãã«æŽæ°ããŸã
{ first: "Yehuda", last: "Katz" }
ã2çªç®ã®è¡<li>Tom DALE</li>
ãå¥ã®3ã€ã®æäœãšæ¯èŒããŸã{ first: "Tom", last: "Dale" }
ã2çªç®ã®è¡<li>Godfrey CHAN</li>
ãå¥ã®3ã€ã®æäœãšæ¯èŒããŸã3.1ã
<li>
ããŒããæ¿å ¥ããŸã3.2ã ããã¹ãããŒããæ¿å ¥ããŸãïŒ "Godfrey"ïŒ
3.3ã ããã¹ãããŒãïŒã¹ããŒã¹ïŒãæ¿å ¥ããŸã
3.4ã
to-upper-case
ãã«ããŒãåŒã³åºããŸãïŒãChanã->ãCHANãïŒ3.5ã ããã¹ãããŒããæ¿å ¥ããŸãïŒ "CHAN"ïŒ
ããã¯14åã®æäœã§ãã çãïŒ
ð@ identity
æŠå¿µçã«ã¯ãè¿œå ãããè¿œå ãããã«é¢ä¿ãªããé åå ã®1ã€ã®ãªããžã§ã¯ãã®ã¿ãå€æŽïŒæ¿å ¥ïŒããŠãããããããã¯äžèŠã«æããŸããã æé©ã«ã¯ãè¿œå ã·ããªãªã§è¡ã£ãã®ãšåãããã«ããã®ã±ãŒã¹ãåŠçã§ããã¯ãã§ãã
ããã§
key="@identity"
ãç»å ŽããŸããé åå ã®èŠçŽ ã®_order_ã«äŸåãã代ããã«ãJavaScriptãªããžã§ã¯ãIDïŒ===
ïŒã䜿çšããŸãã{ first: "Andrew", last: "Timberlake" }
äžèŽããïŒ===
ïŒæ¢åã®è¡ãæ€çŽ¢ããŸãã äœãèŠã€ãããªãã£ãã®ã§ãæ°ããè¡ãæ¿å ¥ïŒè¿œå ïŒããŸãã1.1ã
<li>
ããŒããæ¿å ¥ããŸã1.2ã ããã¹ãããŒããæ¿å ¥ããŸãïŒ "Andrew"ïŒ
1.3ã ããã¹ãããŒãïŒã¹ããŒã¹ïŒãæ¿å ¥ããŸã
1.4ã
to-upper-case
ãã«ããŒãåŒã³åºããŸãïŒ "Timberlake"-> "TIMBERLAKE"ïŒ1.5ã ããã¹ãããŒããæ¿å ¥ããŸãïŒ "TIMBERLAKE"ïŒ
{ first: "Yehuda", last: "Katz" }
äžèŽããïŒ===
ïŒæ¢åã®è¡ãæ€çŽ¢ããŸãã<li>Yehuda KATZ</li>
èŠã€ãããŸããïŒ2.1ã ãã€ã§ããã===ãã€ã§ããããäœãããŸãã
2.2ã ïŒã¹ããŒã¹ã«ã¯åçããŒã¿ãå«ãŸããŠããªããããæ¯èŒã¯å¿ èŠãããŸããïŒ
2.3ã "Katz" === "Katz"ããã«ããŒã¯ "çŽç²"ã§ããããã
to-upper-case
ãã«ããŒãå床åŒã³åºãå¿ èŠããªãããšãããã£ãŠããŸãããããã£ãŠããã®ãã«ããŒïŒ "KATZ"ïŒã®åºåãããããŸãã ïŒ_also_ã¯å€æŽãããªãã£ãã®ã§ãããã§ã¯äœãããŸããããã§ãæé©ãª5ã€ã®æäœã«æ»ããŸãã
ã¹ã±ãŒã«ã¢ãããã
ç¹°ãè¿ããŸãããããã¯ðæ¯èŒãšç°¿èšã®ã³ã¹ããæã§æ¯ã£ãŠããŸãã 確ãã«ãããããç¡æã§ã¯ãªãããã®éåžžã«åçŽãªäŸã§ã¯ããããã¯äŸ¡å€ããªããããããŸããã ãããããªã¹ãã倧ãããåè¡ãè€éãªã³ã³ããŒãã³ãïŒå€ãã®ãã«ããŒãèšç®ãããããããã£ããµãã³ã³ããŒãã³ããªã©ïŒãåŒã³åºããšæ³åããŠãã ããã ããšãã°ãLinkedInã®ãã¥ãŒã¹ãã£ãŒããæ³åããŠã¿ãŠãã ããã é©åãªè¡ãšé©åãªããŒã¿ãäžèŽãããªããšãã³ã³ããŒãã³ãã®åŒæ°ã倧éã«ãã£ãŒã³ããå¯èœæ§ããããäºæ³ãããã¯ããã«å€ãã®DOMæŽæ°ãçºçããå¯èœæ§ããããŸãã ééã£ãDOMèŠçŽ ãäžèŽãããããã«ãŒãœã«äœçœ®ãããã¹ãéžæç¶æ ãªã©ã®DOMç¶æ ã倱ã£ããããããšã«ãåé¡ããããŸãã
å šäœãšããŠãè¿œå ã®æ¯èŒãšç°¿èšã®ã³ã¹ãã¯ãå®éã®ã¢ããªã§ã¯ã»ãšãã©ã®å Žåç°¡åã«äŸ¡å€ããããŸãã
key="@identity"
ã¯Emberã®ããã©ã«ãã§ãããã»ãšãã©ãã¹ãŠã®å Žåã«é©åã«æ©èœããããã{{#each}}
ã䜿çšããå Žåãéåžžã¯key
åŒæ°ã®èšå®ã«ã€ããŠå¿é ããå¿ èŠã¯ãããŸãããè¡çªð¥
ããããåŸ ã£ãŠãã ãããåé¡ããããŸãã ãã®å Žåã¯ã©ãã§ããïŒ
ããã§ã®åé¡ã¯ãåããªããžã§ã¯ããåããªã¹ãã«è€æ°å衚瀺ãããå¯èœæ§ãããããšã§ãã ããã¯ãåçŽãª
@identity
ã¢ã«ãŽãªãºã ãç¹ã«ãããŒã¿ãäžèŽããæ¢åã®è¡ãæ€çŽ¢ããïŒ===
ïŒ...ããšèšã£ãéšåãå£ããŸããããã¯ãããŒã¿ãšDOMã®é¢ä¿ã1ã®å Žåã«ã®ã¿æ©èœããŸãã ïŒ1ãããã¯ãã®å Žåã¯åœãŠã¯ãŸããŸããã ããã¯å®éã«ã¯ããããããªãããã«æããããããããŸãããããã¬ãŒã ã¯ãŒã¯ãšããŠãç§ãã¡ã¯ãããåŠçããå¿ èŠããããŸãããããåé¿ããããã«ãäžçš®ã®ãã€ããªããã¢ãããŒãã䜿çšããŠãããã®è¡çªãåŠçããŸãã å éšçã«ã¯ãããŒããDOMãžã®ãããã³ã°ã¯æ¬¡ã®ããã«ãªããŸãã
ã»ãšãã©ã®å Žåãããã¯éåžžã«ãŸãã§ãããçºçããå Žåãããã¯ã»ãšãã©ã®å ŽåGoodEnoughâ¢ã§æ©èœããŸãã äœããã®çç±ã§ãããæ©èœããªãå Žåã¯ããã€ã§ãããŒãã¹ïŒãŸãã¯RFC 321ã®ããã«é«åºŠãªããŒã€ã³ã°ã¡ã«ããºã ïŒã䜿çšã§ããŸãã
ãðãã«æ»ã
ãã¹ãŠã®è©±ãçµãã£ãã®ã§ãTwiddleã®ã·ããªãªãèŠãæºåãã§ããŸããã
åºæ¬çã«ã次ã®ãªã¹ãããå§ããŸããïŒ
[undefined, undefined, undefined, undefined, undefined]
ãããŒãæå®ããªãã£ããããEmberã¯ããã©ã«ãã§
@identity
ã䜿çšããŸãã ããã«ããããã¯è¡çªã§ããããã次ã®ãããªçµæã«ãªããŸãããããã§ãæåã®ãã§ãã¯ããã¯ã¹ãã¯ãªãã¯ãããšããŸãã
{{action}}
修食åã«ãã£ãŠã€ã³ã¿ãŒã»ãããããmakeChange
ã¡ãœããã«åãã£ã¹ããããããŸãã[true, undefined, undefined, undefined, undefined]
ãŸããDOMã¯ã©ã®ããã«æŽæ°ãããŸããïŒ
true
äžèŽããïŒ===
ïŒæ¢åã®è¡ãæ€çŽ¢ããŸãã äœãèŠã€ãããªãã£ãã®ã§ãæ°ããè¡ãæ¿å ¥ïŒè¿œå ïŒããŸã<input checked=true ...>0: true...
undefined
äžèŽããïŒ===
ïŒæ¢åã®è¡ãæ€çŽ¢ããŸãã<input ...>0: ...
ïŒä»¥åã¯æåã®è¡ïŒãèŠã€ãããŸããïŒ2.1ã
{{idx}}
ããã¹ãããŒãã1
æŽæ°ããŸã2.2ã ãã以å€ã®å ŽåãEmberãç¥ãéãããã®è¡ã§ã¯ä»ã«äœãå€æŽãããŠããããä»ã«äœãããå¿ èŠã¯ãããŸããã
undefined
äžèŽããïŒ===
ïŒæ¢åã®è¡ãæ€çŽ¢ããŸããundefined
ã2åç®ã«èŠãã®ã§ãå éšããŒã¯undefined-1
ã§ããããã<input ...>1: ...
ïŒä»¥åã¯2çªç®ã®è¡ïŒãèŠã€ãããŸããã3.1ã
{{idx}}
ããã¹ãããŒãã2
æŽæ°ããŸã3.2ã ãã以å€ã®å ŽåãEmberãç¥ãéãããã®è¡ã§ã¯ä»ã«äœãå€æŽãããŠããããä»ã«äœãããå¿ èŠã¯ãããŸããã
undefined-2
ãšundefined-3
æŽæ°ããŸãundefined-4
è¡ãåé€ããŸãïŒæŽæ°åŸã«é åå ã®undefined
ã1ã€å°ãªããªãããïŒã ãããããã¯ããªããããããåãããšãã«ã©ã®ããã«åºåãåŸããã説æããŠããŸãã åºæ¬çã«ããã¹ãŠã®DOMè¡ã1ã€äžã«ã·ããããæ°ããè¡ãäžçªäžã«æ¿å ¥ãããæ®ãã¯
{{idx}}
ãæŽæ°ãããŸããæ¬åœã«äºæ³å€ã®éšåã¯2.2ã§ãã æåã®ãã§ãã¯ããã¯ã¹ïŒã¯ãªãã¯ããããã§ãã¯ããã¯ã¹ïŒã1è¡äžãã£ãŠ2çªç®ã®äœçœ®ã«ç§»åãããšããŠããEmberã®
checked
ããããã£ãtrue
ã«å€æŽãããŠããããšãæåŸ ããŠããã§ãããããã€ã³ããããå€ã¯æªå®çŸ©ã§ãããããEmberããããfalse
ã«æ»ãããã§ãã¯ãå€ãããšãæåŸ ã§ããŸããããããããã¯ãããã©ã®ããã«æ©èœãããã§ã¯ãããŸããã åé ã§è¿°ã¹ãããã«ãDOMãžã®ã¢ã¯ã»ã¹ã«ã¯ã³ã¹ããããããŸãã ããã«ã¯ãDOMããã®_èªã¿åã_ãå«ãŸããŸãã æŽæ°ã®ãã³ã«ãæ¯èŒã®ããã«DOMããææ°ã®å€ãèªã¿åããªããã°ãªããªãå Žåãæé©åã®ç®çã¯ã»ãšãã©æãªãããŸãã ãããã£ãŠããããåé¿ããããã«ãDOMã«æžã蟌ãã æåŸã®å€ãèšæ¶ããDOMããèªã¿æ»ãããšãªããçŸåšã®å€ããã£ãã·ã¥ãããå€ãšæ¯èŒããŸããã éããããå Žåã«ã®ã¿ãæ°ããå€ãDOMã«æžã蟌ã¿ãŸãïŒãããŠæ¬¡åã®ããã«ãã£ãã·ã¥ããŸãïŒã ããã¯ãåããä»®æ³DOMãã¢ãããŒããå ±æãããšããæå³ã§ãããDOMå šäœã®ãããªãŒæ§ããä»®æ³åããã®ã§ã¯ãªãããªãŒãããŒãã§ã®ã¿å®è¡ããŸãã
ãããã£ãŠãTL; DRã
checked
ããããã£ïŒãŸãã¯ããã¹ããã£ãŒã«ãã®value
ããããã£ãªã©ïŒãããã€ã³ãããããšãå®éã«ã¯æåŸ ã©ããã«æ©èœããŸããã<div>{{this.name}}</div>
ãã¬ã³ããªã³ã°ããjQuery
ãŸãã¯chromeã€ã³ã¹ãã¯ã¿ãŒã䜿çšããŠdiv
èŠçŽ ã®textContent
ãæåã§æŽæ°ããå Žåãæ³åããŠã¿ãŠãã ããã Emberãããã«æ°ã¥ããthis.name
ãæŽæ°ãããšã¯æããªãã£ãã§ãããã ããã¯åºæ¬çã«åãããšã§ããchecked
ããããã£ã®æŽæ°ã¯Emberã®å€éšã§è¡ãããããïŒãã©ãŠã¶ã®ãã§ãã¯ããã¯ã¹ã®ããã©ã«ãã®åäœãä»ããŠïŒãEmberã¯ãããèªèããŸãããããã
{{input}}
ãã«ããŒãååšããçç±ã§ãã é¢é£ããã€ãã³ããªã¹ããŒãåºã«ãªãHTMLèŠçŽ ã«ç»é²ããæäœãé©åãªããããã£ã®å€æŽã«åæ ããŠãé¢ä¿è ïŒã¬ã³ããªã³ã°ã¬ã€ã€ãŒãªã©ïŒã«éç¥ã§ããããã«ããå¿ èŠããããŸãããããç§ãã¡ãã©ãã«æ®ãã®ãããããŸããã ãããé©ãã¹ãçç±ã¯ç解ã§ããŸãããããã¯äžé£ã®äžå¹žãªãŠãŒã¶ãŒãšã©ãŒã§ãããšèšããã¡ã§ãã ããããããããã®ããããã£ãå ¥åèŠçŽ ã«ãã€ã³ãããããšã«å¯ŸããŠãªã³ãããå¿ èŠããããŸããïŒ