Backbone: ๋ชจ๋ธ์ด ํ•จ์ˆ˜๋กœ ์ •์˜๋˜๋ฉด modelId ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•ด idAttribute๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2019๋…„ 12์›” 09์ผ  ยท  10์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: jashkenas/backbone

duplicate

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

์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•œ ํ›„ ์ด์ „ https://github.com/jashkenas/backbone/pull/3966 PR์„ ๋ณ‘ํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒˆ๊ฑฐ๋กœ์šฐ์‹œ๋”๋ผ๋„ ์•Œ๋ ค์ฃผ์„ธ์š”...

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

๋‚˜๋Š” ๋”ฐ๋ฅด์ง€ ์•Š๋Š”๋‹ค. ๋ชจ๋ธ์€ ์–ด๋–ป๊ฒŒ ํ•จ์ˆ˜๋กœ ์ •์˜๋ฉ๋‹ˆ๊นŒ?

์‹ค์ œ๋กœ ์–ด์ œ ์ด ๋ฌธ์ œ(๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ)๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹คํ˜•์„ฑ ๋ชจ๋ธ ์ƒ์„ฑ์„ ์œ„ํ•ด ์ปฌ๋ ‰์…˜์— ๋ชจ๋ธ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปฌ๋ ‰์…˜์—์„œ .add ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋ฐฑ๋ณธ ์ฝ”๋“œ๋Š” model ์†์„ฑ์—์„œ .prototype.idAttribute ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€๋งŒ model ํ•จ์ˆ˜๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•œ ๊ฒฝ์šฐ ES2015 ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ์—๋Š” prototype ์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค: https://github.com/jashkenas/backbone/blob/75e6d0ce6394bd2b809823c7f7dc014ddb6ae287/backbone.js#L1102

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

const Library = Backbone.Collection.extend({
    model () {
       // stuff goes here
   }
});

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง€์ •ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

const Library = Backbone.Collection.extend({
    model: function () {
       // stuff goes here
   }
});

์‹ค์ œ๋กœ ์–ด์ œ ์ด ๋ฌธ์ œ(๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ)๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹คํ˜•์„ฑ ๋ชจ๋ธ ์ƒ์„ฑ์„ ์œ„ํ•ด ์ปฌ๋ ‰์…˜์— ๋ชจ๋ธ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปฌ๋ ‰์…˜์—์„œ .add ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋ฐฑ๋ณธ ์ฝ”๋“œ๋Š” model ์†์„ฑ์—์„œ .prototype.idAttribute ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€๋งŒ model ํ•จ์ˆ˜๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•œ ๊ฒฝ์šฐ ES2015 ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ์—๋Š” prototype ์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๋ฅผ ๋ด:

https://github.com/jashkenas/backbone/blob/75e6d0ce6394bd2b809823c7f7dc014ddb6ae287/backbone.js#L1102

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

const Library = Backbone.Collection.extend({
    model () {
       // stuff goes here
   }
});

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง€์ •ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

const Library = Backbone.Collection.extend({
    model: function () {
       // stuff goes here
   }
});

๋ฌธ์ œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๊ทธ๋Ÿฌ๋‚˜ ๊ท€ํ•˜์˜ ๋Œ€๋‹ต์€ idAttribute์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์‹œ ์ƒˆ ๋ชจ๋ธ ์ฐธ์กฐ๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ id๋กœ ์ƒˆ ๋ชจ๋ธ์„ ์–ป์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

image

Workarond - ๋ชจ๋ธ๊ณผ ๋™์ผํ•œ model.prototype.idAttribute๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” Collection ์˜ model $๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Override this property to specify the model class that the collection contains. ์ด API๋Š” ํ•จ์ˆ˜๋กœ ์ •์˜๋˜๋Š” ๋ชจ๋ธ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@paulfalgout Collection.model์— ๋Œ€ํ•œ ๋ฐฑ๋ณธ ๋ฌธ์„œ๋Š” ํ•จ์ˆ˜๋ฅผ model ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. model () ๊ตฌ๋ฌธ( model: function() ๋Œ€์‹ )์œผ๋กœ ์ด๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ๋ฒ„๊ทธ์ฒ˜๋Ÿผ ๋ณด์ด๊ฑฐ๋‚˜ ์ ์–ด๋„ ๊ทน๋„๋กœ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ ๋ณด์ž…๋‹ˆ๋‹ค.

์˜ˆ, ์›๋ณธ ๋ฉ”์‹œ์ง€์—์„œ ๋ฌธ์„œ์˜ ๊ด€๋ จ ๋ถ€๋ถ„์— ์—ฐ๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค: https://backbonejs.org/#Collection -model

@PavelKoroteev : ์šฐ๋ฆฌ์˜ ๋ฌธ์ œ๊ฐ€ ๊ด€๋ จ๋˜์–ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ๊ฐ™์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ•˜๋Š” ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค(์ฝ˜์†”์—์„œ ๋ถ™์—ฌ๋„ฃ์Œ).

collection = new (Backbone.Collection.extend({  model (attrs, options) { return new (Backbone.Model.extend({ idAttribute: 'customId' }))(attrs, options)}}));

childย {length: 0, models: Array(0), _byId: {โ€ฆ}}

collection.add({ customId: 'id.1' });
backbone.js:1102 Uncaught TypeError: Cannot read property 'idAttribute' of undefined
    at child.modelId (backbone.js:1102)
    at child.get (backbone.js:997)
    at child.set (backbone.js:872)
    at child.add (backbone.js:814)
    at <anonymous>:1:12

๋ฌธ์ œ๋Š” ์‚ฌ์‹ค ๋˜‘๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ https://github.com/jashkenas/backbone/issues/4203 ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

model: function(attrs, options) ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด idAttribute ๊ฐ€ ์—†๋Š” ํ”„๋กœํ† ํƒ€์ž…์ด ์ƒ์„ฑ๋˜๊ณ  id ๋กœ ๋Œ€์ฒด๋˜์–ด "์ž‘๋™"ํ•ฉ๋‹ˆ๋‹ค.

๋‹คํ˜•์„ฑ ๋ชจ๋ธ์ด ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. _ํ•˜์ง€๋งŒ_... ๊ฝค ์˜ค๋žซ๋™์•ˆ model.prototype ๊ฐ€ ์žˆ๋Š” ์ด ๋ผ์ธ ๋•Œ๋ฌธ์— idAttribute ๋˜๋Š” es6 ์œ ํ˜• ๋ฉ”์†Œ๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

https://github.com/jashkenas/backbone/pull/3966 ์ด ์ผ์ข…์˜ ์ˆ˜์ •์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค :-/

2016๋…„์˜ PR์ด ์‡ ์•ฝํ•ด์ง€๊ณ  ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณด๋ฉด(๋˜๋Š” ๋” ๋‚˜์€ ๊ฒƒ์„ ์œ„ํ•ด ๊ฑฐ๋ถ€๋จ) ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด PR์„ ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์กฐ์ฐจ ๊บผ๋ คํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด Backbone์€ ๊ฑฐ์˜ ์ฃฝ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋‚˜๋„ ํฌํฌ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ด๋ฆ„์€ Skeletor ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Backbone ์ฝ”๋“œ๋ฅผ ์ตœ์‹  API ๋ฐ ํ‘œ์ค€์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ ๋‹ค์Œ ์ ์ฐจ ๋” ๋‚˜์€ ๊ฒƒ์œผ๋กœ ์˜ฎ๊ฒจ๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•œ ํ›„ ์ด์ „ https://github.com/jashkenas/backbone/pull/3966 PR์„ ๋ณ‘ํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒˆ๊ฑฐ๋กœ์šฐ์‹œ๋”๋ผ๋„ ์•Œ๋ ค์ฃผ์„ธ์š”...

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