{{each-in}}
๋ ํค์ ๋ง์นจํ๊ฐ ํฌํจ ๋ ๊ฐ์ ๋ํด undefined
๋ฅผ ๋ฐํํฉ๋๋ค.
์ด ๋ฒ๊ทธ๋ 3.7.2์ ์กด์ฌํ์ง ์์ผ๋ฉฐ 3.8.0-beta.1์ ์ฒ์ ๋ํ๋๊ณ 3.8.0-beta.3์ ์ฌ์ ํ ์กด์ฌํฉ๋๋ค.
ํ
์คํธ ์คํจ ( packages/@ember/-internals/glimmer/tests/integration/syntax/each-in-test.js
๋๋กญ)
[`<strong i="11">@only</strong> each-in supports keys with a period in them`]() {
this.render(
strip`
<ul>
{{#each-in categories as |_ item|}}
<li>{{item.name}}</li>
{{/each-in}}
</ul>
`,
{
categories: {
// uncomment and run. notice `items` is undefined
'hello.world': { name: 'foo' },
// uncomment and run. notice it works as expected
// hello world: { name: 'foo' },
},
}
);
// Empty
this.assertHTML(strip`
<ul>
<li>foo</li>
</ul>
`);
}
@jasonmit ํ ์คํธ ์คํจ๋ก PR์ ๋ณด๋ผ ์ ์์ต๋๊น?
์ฐ๋ฆฌ๋ ํ์คํ ์ด๊ฒ์ ๊ทผ๋ณธ ์์ธ์ผ๋กํด์ผํ์ง๋ง, ์ด๊ฒ์ด ๊ฒฐ๊ตญ ๋ฒ๊ทธ๋ก ๊ฐ์ฃผ ๋ ๊ฒ์ด๋ผ๊ณ ํ์ ํ์ง ์์ต๋๋ค. ํนํ get(obj, 'hello.world')
๋ obj.hello.world
์๋ obj['hello.world']
obj.hello.world
์ฐพ์ต๋๋ค.
๋ค, ๊ทธ๊ฒ์ด ์ด์ ๋ผ๊ณ ํ์ ํฉ๋๋ค. each-in์ get์ ์ฌ์ฉํ๋ฏ๋ก ์ด๊ฒ์ get with dot path ํฐ์ผ์ ์ข ๋ฅ์ ๋๋ค. Mayyyybe์ด ํน์ ๊ฒฝ์ฐ์ ES5 ๊ฒํฐ๋ฅผ ์ฐฉ๋ฅ์ํจ ํ ์ฌ๊ธฐ์ ๋ค์ด๊ฐ ํ์๊ฐ ์์ต๋๋ค. ์ด์จ๋ ํ๋ก์์ ํจ๊ป ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๊น?
๋๋ ์ด๊ฒ์ด ๋ฒ๊ทธ๋ก ๊ฐ์ฃผ๋๋์ง ๊ทธ๋ฆฌ๊ณ ์ง๊ธ ์ด๊ฒ์ ๊ณ ์น๋ ๊ฒ์ด ๋ค๋ฅธ ๊ณณ์์ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๊ฑฐ๋ ๊ธธ์ ๋ฐ๋ผ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ์ง ํ์คํ์ง ์๋ค๋ ๊ฒ์ ๋์ํฉ๋๋ค.
Ya, ๊ทธ๋ฆฌ๊ณ ์ ๋ ์ค์ ๋ก ์ฌ๊ธฐ์ ๋ฐ๋ณต๋๋ ๊ฐ์ฒด์ ๋ํ ํด๋ฆฌ์คํฑ ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ ์ผ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด๋ฌํ ๋ฐ๋ณต๊ธฐ ์ค ์ผ๋ถ๋ get
( ObjectIterator.fromIndexable
)๋ฅผ ์ฌ์ฉํ๊ณ ์ผ๋ถ๋ ์ฌ์ฉํ์ง ์์ต๋๋ค ( ObjectIterator.fromForEachable
, MapLikeNativeIterator.from
).
์ด ๊ฒฝ์ฐ fromIndexable
๋ฅผ๋ณด๊ณ ์์ต๋๋ค. get์ ์ฌ์ฉํ์ง ์๋ ์ ์ผํ ๋ฌธ์ ๋ cps๊ฐ์๋ pojos๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@chancancode-๋ค , @jasonmit ์ด ๊ฐ์ฒด๋ฅผ Symbol.iterable
๊ตฌํํ๋๋กํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ธฐ ๋๋ฌธ์ ์ง์ ํฉ๋๋ค.
@jasonmit ํ ์คํธ ์คํจ๋ก PR์ ๋ณด๋ผ ์ ์์ต๋๊น?
ํ์คํ, ์ง๊ธ ๊ทธ๋ ๊ฒํ๊ณ ๋ฌธ์ ๋ฅผ ์ฐ๊ฒฐํ๊ฒ ์ต๋๋ค.
๋์ค์ @jasonmit ์ด ๊ฐ์ฒด๊ฐ Symbol.iterable์ ๊ตฌํํ๋๋กํ์ฌ ๋ฌธ์ ๋ฅผ
์ข์ ์๊ฐ์ ๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ์๋ํด ๋ณด๊ฒ ์ต๋๋ค.
ํค์ ๋ง์นจํ๊ฐ์๋ ์ด์ ๊ฐ ๊ถ๊ธํ ๊ฒฝ์ฐ ๋ฐ๋ณต๋๋ ๊ฐ์ฒด์ ํค๋ ISO ๋ฌธ์์ด (์ : 2011-10-05T14:48:00.000Z
)์ด๊ณ UTC ์คํ์
์ด์ ์ ๋ง์นจํ๊ฐ ์์ต๋๋ค.
์ด๊ฒ์ ์ํ๊ฐ ๋ฌด์์ธ์ง ๊ถ๊ธํ์ญ๋๊น? ๋ชจ๋ ๊ฐ์ฌํฉ๋๋ค
@ amk221 ๋๋ ์ด๊ฒ์ด ํด๊ฒฐ๋์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ฒฐ๊ตญ ํค์ ๊ธฐ๊ฐ์ ํผํ๊ธฐ ์ํด ์ฑ์ ๋ฆฌํฉํ ๋งํ์ง๋ง ๋ถ๋ช ํ ๋ชจ๋ ์ฌ๋์๊ฒ ์ด์์ ์ธ ์๋ฃจ์ ์ ์๋๋๋ค.
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ด๋ฒ์ PR์ ๋ง๋ค์ด ๋ฆฌ๋ทฐ๋ฅผ ์์ฒญํ์ต๋๋ค : D
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ ์์๋ ์ผ์ด ์์ต๋๊น? ์ด๊ฒ ์ ๋ง ํ์ํด ๐ค
@ amk221 ๋์ฐ๋ฏธ๋ฅผ ์ถ๊ฐ ํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ด ๋ด๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ๋ฐฉ๋ฒ์
๋๋ค.
๊ทธ๋ฌ๋ ์ด๊ฒ์ด ์ค์ํ๋ค๋ ๋ฐ ๋์ํ์ญ์์ค.
์ด๊ฒ์ ๋ช ์๊ฐ์ ๋ญ๋นํ์ต๋๋ค. ์ ๋ Ember๋ฅผ ์ฒ์ ์ ํ๊ณ ์ด๊ฒ์ ์์ ํ ๋๋์ต๋๋ค.
๋ด ์ฑ์ ๊ฒฝ์ฐ ์ฌ๋ฌ ํธ์คํธ์ ์ํ๋ฅผ ์ถ์ ํ๋ฏ๋ก IP ๋๋ ๋๋ฉ์ธ ์ด๋ฆ์ผ๋ก ํด์ ํค๋ฅผ ์ง์ ํฉ๋๋ค. localhost
์ ์ธํ ๋ชจ๋ ํญ๋ชฉ์ ๋ํด ์ ์๋์ง ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ณ ์ด ๋ฌธ์ ๋ฅผ ์์ ๋ด๋ ค๊ณ ๋ฏธ์ณ ๋ฒ๋ ธ์ต๋๋ค.
@ devop911 ์ ๋น์ ์ ๋์ฐ๋ฏธ๋ฅผ ๊ณต์ ํฉ๋๋ค ๐
@ amk221 ๋น์ ์ด ์๊ตฌํ๋ ๊ฒ์ ์๋์ง๋ง ์ด๊ฒ์ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ตญ :
import { helper } from '@ember/component/helper';
import _ from 'lodash';
export function hashToArray([h]) {
return _.map(h, function(value, key) {
return {
key: key,
value: value,
}
});
}
export default helper(hashToArray);
๋๋์ด ๋ฌธ์ ๋ ๋ง๋ฌ๋ค. ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
get
๋ํ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ํ๊ทํ์ง ์๊ณ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ํ๊ท๊ฐ ๋์์ง ์๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๋ ๋ฒค์น ๋งํฌ๋ฅผ ์ป์ ์ ์๋ค๋ฉด ์ด๊ฒ์ get
์ ์ถ๊ฐํ๋ ๊ฒ์ด each-in
์ง์ ๋น๋ํด์ผํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ๊ด์ฐฎ์ ํ๊ท๋ผ๊ณ ์๊ฐํฉ๋๋ค.
ํ๋ก์ ์ธ ๊ฒฝ์ฐ ์๋์ผ๋ก ํ๋ก์๋ฅผ ํ์ธํ๊ณ ๊ฐ์ฒด์ unknownProperty
๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ์์๋๋ก ์๋ ํ ์์๋ each-in
์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ณต ํ ๋ ํน๋ณํ ์ผ๋ฐ get ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฅ๊ธฐ์ ์ผ๋ก ์ถ์ ๋ ์ํ์ ๊ณง ์ฌ ์ ์์ต๋๋ค ๐ฉ
์งง์ ์ด์ผ๊ธฐ : Ember๊ฐ ์๋ ๋ค๋ฅธ ๊ฒ์ผ๋ก ์ ํํ์ญ์์ค. ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
@ devop911 ๋๊ธ์ ๋งค์ฐ ๊ฑด์ค์ ์ด๊ฑฐ๋ ๋์์ด๋์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋์ด ๋ฌธ์ ๋ฅผ ์ ๋์ ์ผ๋ก ํด๊ฒฐํ๊ณ ์ถ์ง๋ง ์๋์ ์ผ๋ก ๋๋ฌธ ์ฃ์ง ์ผ์ด์ค์ ๋ํ ์ฌ์ฉ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํ๊ท์ํค๊ณ ์ถ์ง ์์ต๋๋ค. ๊ด๋ฆฌ์๋ก์๋ ๊ฒ์ ์ด๋ ค์ด ์ํฉ์ ๋๋ค.
์ฐ๋ฆฌ๋์ด ๋ฌธ์ ์ ๋ํ ์์ ์ ์ ๋ ์์๋ผ ๊ฒ์ด๋ฉฐ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ณด๋ค ์ฝ๊ฐ ๋ ๋ง์ ์์ ์ด ํ์ํ๋ฉฐ Octane์ ๋ฐฐ์ก ๊ธฐ๋ฅ์ ์ค์ ์ ๋์์ต๋๋ค. ๋๋ ๋์ํ์ง๋ง ์ด๊ฒ์ ์ค์ํฉ๋๋ค.
ํ
์ฌ์ฉ์๊ฐ ํค ์ด๋ฆ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํ๊ฒํ์ธ์.
@pzuraq each-in
์ ํค์ ๋ง์นจํ๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด ์ต์ํ ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ๊ท๋ฅผ ๋์
ํ์ง ์๋ ํ๋ฅญํ ์๋ฃจ์
์ ์์ต๋๋ค. ๋ง์ต๋๋ค.
@ devop911 ์ฃ์ง ์ผ์ด์ค์ ๋ํ ์ ์ ํ๊ฐ๋์ด ๋ฌธ์ ๊ฐ ์ด๋ฆฐ ์ดํ ์ ๋ฐ์ ์ผ๋ก์ด ๋ฒ๊ทธ์ ๋ํ๋ณด๊ณ ๊ฐ ๊ฑฐ์ ์๋ค๋ ์ฌ์ค์ ๊ธฐ๋ฐ์ผ๋กํ์ต๋๋ค. ์ด๊ฒ์ด ๋ชจ๋ Ember ์์ฉ ํ๋ก๊ทธ๋จ์ด ์์กดํ๋ ๋์์ด๋ผ๋ฉด ์ ๋์ ์ผ๋ก ๋ ๋์ ์ฐ์ ์์ ์์ ์ด๋์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ง์ ์ฌ๋๋ค์ด ํค์ ๋ง์นจํ๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฐ๋๋ก ์ฐ๋ฆฌ๋ ์ฑ๋ฅ์ด ์ ํ ๋ ๋๋ง๋ค ๋ง์ ๋ถ๋ง์๋ฐ์ต๋๋ค. ์ด๊ฒ์ด ํซ ๊ฒฝ๋ก๊ฐ ์๋์๋ค๋ฉด ์์ ์ ํ์คํ ํจ์ฌ ๋ ์ผ์ฐ ์์ ๊ฒ์ ๋๋ค. ๋ด๊ฐ ๋งํ๋ฏ์ด, ๊ด๋ฆฌ์๋ก์๋ ๊ฒ์ ์ด๋ ค์ด ์ํฉ์ ๋๋ค. ํนํ ๋น์ ์ด ์ผ์ ๋๋ด๋ ค๊ณ ํ ๋ ๐ฉ ๋์ค์ ๋๊ตฐ๊ฐ๊ฐ์ด ์ผ์ํ๋๋กํ๊ธฐ ์ํด ์ฐ๋ฆฌ๊ฐ ๋ฌด์์ ํ ์ ์๋์ง ์์ ๋ณด๊ฒ ์ต๋๋ค
@ rwwagner90 ๋๋ ์ฐ๋ฆฌ๊ฐ ํ๋์ ๊ณ ์น ์ ์๋ค๊ณ ์๊ฐํ๋ฏ๋ก ๊ฒฝ๊ณ ๋ฅผ ์์ํ์ง ์๊ณ ์ถ์ง๋ง ๊ณ ์น ์ ์๋ค๋ฉด ์ฌ์ฉ์์๊ฒ ํ์คํ ๊ฒฝ๊ณ ํด์ผํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
https://github.com/emberjs/ember.js/pull/18296์ ์ํด ์์ ๋์์ต๋๋ค.
ํด๊ฒฐํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค โค๏ธ
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
https://github.com/emberjs/ember.js/pull/18296์ ์ํด ์์ ๋์์ต๋๋ค.