Ember.js: Ember.Object๋ฅผ ๊ธฐ๋ณธ JS ๊ฐœ์ฒด๋กœ ๋‹ค์‹œ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณต๊ฐœ API๊ฐ€ ์—†๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2015๋…„ 04์›” 13์ผ  ยท  10์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: emberjs/ember.js

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋งŽ์ด ํ•„์š”๋กœ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ  ์™œ ์ด๊ฒƒ์ด ํ”„๋ ˆ์ž„์›Œํฌ์— ์ถ”๊ฐ€๋˜์ง€ ์•Š์€ ์ด์œ ๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ํ’๋ถ€ํ•˜๊ณ  ๋ถ„๋ช…ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Ember.Object๋Š” ์ผ๋ฐ˜ ๊ฐœ์ฒด์— ๋งŽ์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์ถ”๊ฐ€ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฏ€๋กœ ๊ฐœ์ฒด์˜ ์†์„ฑ์„ ๋ฐ˜๋ณตํ•˜๋Š” ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ๊ฐœ์ฒด์— ๋Œ€ํ•ด ์ž‘์—…ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์†์„ฑ์ด ์‹ค์ œ๋กœ ๋ฐฉํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

Needs Submitter Response

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

pojo๊ฐ€ ํ•„์š”ํ•œ ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง€์› ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Datatables, jstree ๋“ฑ์€ ๋ชจ๋‘ ํ‰๋ฒ”ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด๋ฅผ ๊ธฐ๋Œ€ํ•˜๋ฉฐ ember ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ํญ๋ฐœํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  10 ๋Œ“๊ธ€

ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ ๊ฐ™์•„์š”. ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ํ•„์š”์„ฑ์„ ๋ฐœ๊ฒฌํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ฐœ์ฒด ์ง๋ ฌํ™”๋ฅผ ์œ„ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์‹œ๊ฐ„์ด๊ณ  ember-data๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๊ทธ ํ•„์š”์„ฑ์€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

์ฆ‰, ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ Ember.ObjectProxy ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ํ•˜๊ณ  ๊ทธ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ๋ฉ€๋ฆฌ ์™”๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์˜ˆ์ž…๋‹ˆ๋‹ค. http://emberjs.jsbin.com/kapenomivu/1/edit?js ,์ถœ๋ ฅ

๊ฐ์ฒด์˜ ์†์„ฑ์„ ๋ฐ˜๋ณตํ•˜๋Š” ์ผ๋ฐ˜ ํ•จ์ˆ˜

์ด๊ฒƒ์ด hasOwnProperty ์šฉ๋„์ž…๋‹ˆ๋‹ค.

์ž์œ ๋กญ๊ฒŒ Ember.keys Object.keys

Ember.keys(Ember.Object.create({ foo: 1 }))
>  [ 'foo' ]

์ฆ‰, ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ Ember.ObjectProxy๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋‚˜์™”๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์˜ˆ์ž…๋‹ˆ๋‹ค. http://emberjs.jsbin.com/kapenomivu/1/edit?js ,์ถœ๋ ฅ

pojo ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@stefanpenner ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ •๋ง๋กœ OP์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฐ€ ์†์„ฑ/ํ•จ์ˆ˜/๊ด€์ฐฐ์ž/๋“ฑ์„ ๊ณ„์‚ฐํ•œ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ๋‚˜๋Š” Ember.keys ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ, ์—ฌ๊ธฐ์—๋Š” ์ˆ˜์—…์˜ ๋‚ด์šฉ์ด ํฌํ•จ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ (๋‹น์‹œ์—๋Š” ๋งน์„ธํ•ฉ๋‹ˆ๋‹ค), ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์ฆ๊ฒ๊ฒŒ ๋†€๋ž์Šต๋‹ˆ๋‹ค.

ํ˜ธ๊ธฐ์‹ฌ์—์„œ Ember.ObjectProxy ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

ํŽธ์ง‘ : ๋ช…ํ™•ํžˆํ•˜๊ธฐ ์œ„ํ•ด Ember.keys ์†”๋ฃจ์…˜์ด ํ›จ์”ฌ ๊นจ๋—ํ•˜๊ณ  ๋‚ด ํˆฌํ‘œ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ObjectProxy ๋Œ€ํ•ด ๊ตฌ์ฒด์ ์œผ๋กœ ๋ถ€์ •์ ์ธ ์ƒ๊ฐ์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

ember ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ ์›๋ž˜ "ํ•ด์‹œ" ๊ตฌ์กฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ „๋žต์ด ์žˆ์Šต๋‹ˆ๋‹ค(์ˆ˜์ •๋œ ๊ฐ’์ด ์žˆ๋“  ์—†๋“ ). ์ œ ์งˆ๋ฌธ์€ ๋Œ€๋ถ€๋ถ„ ์ผ๋ฐ˜์ ์ธ Ember.js ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ด๊ฒƒ์„ ํ•„์š”๋กœ ํ•˜๋Š” ๋นˆ๋„์— ๊ด€ํ•œ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. .nativeCopy ๋ฉ”์†Œ๋“œ๋Š” Ember.Object ์— ์ •๋ง ์ข‹์„ ๊ฒƒ์ด์ง€๋งŒ API ์ถ”๊ฐ€์— ๋Œ€ํ•ด ๊ทน๋„๋กœ ์„ ํƒ์ ์ธ ํ•„์š”์„ฑ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์„ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ผ ๋•Œ๋„ ์žˆ๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์„ ๋•Œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋‚˜๋งŒํผ ์ž์ฃผ ์ด ํ•„์š”์„ฑ์— ์ง๋ฉดํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋Š๋‚Œ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ๊ตฌ์ฒด์ ์ธ ์˜ˆ๊ฐ€ ๊ถ๊ธˆํ•˜์‹œ๋‹ค๋ฉด Ember.Object ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ [โ€ฆ]" ์–‘์‹์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ƒ์„ฑ ์–‘์‹์€ ํ•ญ๋ชฉ ๋ชฉ๋ก ๋ฐ”๋กœ ์•„๋ž˜์— ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. this.store.createRecord ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–‘์‹์„ ๋’ท๋ฐ›์นจํ•˜๋Š” ๋นˆ ๋ชจ๋ธ์„ ์ƒ์„ฑํ•˜๋ฉด ์ฆ‰์‹œ ์œ„ ๋ชฉ๋ก์— ์ƒˆ ํ•ญ๋ชฉ์ด ์ถ”๊ฐ€๋˜๊ณ  ์–‘์‹์„ ์ž‘์„ฑํ•  ๋•Œ ๊ฐ’์ด ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค. ์ด๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด Ember.Object ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์–‘์‹์„ ๋’ท๋ฐ›์นจํ•  ์ˆ˜ ์žˆ์ง€๋งŒ createRecord ์— ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ด ์ž‘์—…์„ ๋งŽ์ด ํ•˜๋Š” ๋งˆ์ง€๋ง‰ ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” Ember.Copyable ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ๊ณ ํ†ต์Šค๋Ÿฝ๊ธฐ ๋•Œ๋ฌธ์— ๊นŠ์€ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” Ember.Copyable ์˜ ๋””์ž์ธ์„ ์ข‹์•„ํ•˜์ง€๋งŒ ์ •์ƒ์ ์ธ ๊ธฐ๋ณธ/์ผ๋ฐ˜ ๊ตฌํ˜„์€ ์ •๋ง ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

pojo๊ฐ€ ํ•„์š”ํ•œ ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง€์› ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Datatables, jstree ๋“ฑ์€ ๋ชจ๋‘ ํ‰๋ฒ”ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด๋ฅผ ๊ธฐ๋Œ€ํ•˜๋ฉฐ ember ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ํญ๋ฐœํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@ccarterc ์™€ ๊ฐ™์€ ์˜ˆ: localforage.setItem - Ember.Object๊ฐ€ ์žˆ๋Š” PITA์ž…๋‹ˆ๋‹ค.
์˜ค๋Š˜ ๊ทธ๊ฒƒ์„ ์ง๋ฉดํ•˜๊ณ  ๋งž์ถคํ˜• "ํƒˆ์ถœ๊ธฐ"๋ฅผ ๋„ฃ์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜ ์ด ์ •ํ™•ํ•œ ํ•„์š”์— ๋ถ€๋”ช์ณค์Šต๋‹ˆ๋‹ค. @ccarterc๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ์ด๊ฒƒ์€ POJO๋ฅผ ๊ธฐ๋Œ€ํ•˜๋Š” ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” "๊ณต์‹์ ์ธ" ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

POJO๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์›ํ•˜๋ฏ€๋กœ ๋‚ด ๊ฐœ์ฒด๋ฅผ ํƒ€์‚ฌ ๋ฐ”๋‹๋ผ JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ค, ์ œ3์ž API๋ฅผ ์œ„ํ•ด ์ง€๊ธˆ ์ด ๋ฌธ์ œ๋กœ ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์•ฝ 70๊ฐœ ํ•„๋“œ์˜ ๋ฐฐ์—ด์ด ์žˆ๋Š” ๊ฐœ์ฒด์— ๋Œ€ํ•ด getProperties ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์–ด๋ฆฌ์„์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฉฐ ๊ทธ๋ ‡๊ฒŒํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค ...

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰