Backbone: μ»¬λ ‰μ…˜μ€ 제거된 λͺ¨λΈμ— λŒ€ν•œ λ‚΄λΆ€ `_byId` μ°Έμ‘°λ₯Ό μ œκ±°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2017λ…„ 09μ›” 22일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: jashkenas/backbone

Collection κ°€ λ‚΄λΆ€ ν˜Όλž€ μƒνƒœμ— λΉ μ§€κ²Œ ν•˜λŠ” λ°±λ³Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 일련의 단계에 λŒ€ν•΄ λ‚΄κ°€ μ§μž‘ν•  수 μžˆλŠ” κ°€μž₯ 짧은 μž¬μƒμ‚°μ— λŒ€ν•΄ μ•„λž˜λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

μž‘μ—… 사본은 이 JSFiddle μ—μ„œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

무엇을 λ³΄μ—¬μ£ΌλŠ” 것은 인 collection λ‚΄λΆ€ (μœ μ§€ _byId (A)에) κΈ°μ€€ remove() -ed Model . Model λŠ” 더 이상 collection.models 일뢀가 μ•„λ‹ˆμ§€λ§Œ (이전) id 톡해 계속 검색할 수 μžˆμŠ΅λ‹ˆλ‹€.

var
    MyView = Backbone.View.extend( {

        initialize: function () {

            this.model = new Backbone.Model( {

                id:  'foo'
            ,   foo: 'bar'
            } );

            this.collection = new Backbone.Collection( this.model );

            this.listenTo( this.model, 'change:id', function ( model, id ) {

                if ( id == null ) {
                    this.collection.remove( model );
                }

            } );

            this.model.unset( 'id' );

            $('#models' ).val( JSON.stringify( this.collection.models      ));
            $('#_byId'  ).val( JSON.stringify( this.collection._byId       ));
            $('#get-foo').val( JSON.stringify( this.collection.get( 'foo' )));
        }

    })

, foo = new MyView()
;

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

예 β€” μ ˆλŒ€ μ΄λ ‡κ²Œ ν•΄μ„œλŠ” μ•ˆ λ˜μ§€λ§Œ μ—¬μ „νžˆ λ²„κ·Έμž…λ‹ˆλ‹€.

id κ°€ κ°’μ—μ„œ null 되면 λ¨Όμ € delete this._byId[id] μˆ˜μ •ν•˜μ—¬ 이 문제λ₯Ό ν•΄κ²°ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λͺ¨λ“  3 λŒ“κΈ€

흠, ν₯λ―Έλ‘­κ΅°. μ»¬λ ‰μ…˜μ— λͺ¨λΈμ„ μΆ”κ°€ν•  λ•Œ __byId_λŠ” λͺ¨λΈμ— λŒ€ν•œ 참쑰인 model.id와 model.cid의 두 가지 속성을 μΆ”κ°€ν•©λ‹ˆλ‹€. 1134 행에 λŒ€ν•œ 문제, id === undefined μ΄μ§€λ§Œ __byId_에 model.id - _'foo'_κ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

model.idλ₯Ό value == null 둜 λ³€κ²½ν•  λ•Œ μ»¬λ ‰μ…˜μ—λŠ” νŠΉλ³„ν•œ 논리가 μ—†μŠ΅λ‹ˆλ‹€. 1183행을 ν™•μΈν•˜μ„Έμš”.

λ˜ν•œ 당신은 μ„ΈνŠΈ _null_ λ˜λŠ” _undefined_에 ν•΄μ œ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. this.model.set('아이디', null);

μΆ”μ‹ : λͺ¨λΈ IDλ₯Ό null λ˜λŠ” undefined둜 μ„€μ •ν•  ν•„μš”κ°€ μ—†λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ΄λŠ” μ•ˆν‹° νŒ¨ν„΄μž…λ‹ˆλ‹€.

backbone_remove

backbone_model_event

예 β€” μ ˆλŒ€ μ΄λ ‡κ²Œ ν•΄μ„œλŠ” μ•ˆ λ˜μ§€λ§Œ μ—¬μ „νžˆ λ²„κ·Έμž…λ‹ˆλ‹€.

id κ°€ κ°’μ—μ„œ null 되면 λ¨Όμ € delete this._byId[id] μˆ˜μ •ν•˜μ—¬ 이 문제λ₯Ό ν•΄κ²°ν•΄μ•Ό ν•©λ‹ˆλ‹€.

이벀트λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  μ»¬λ ‰μ…˜μ—μ„œ λͺ¨λΈμ„ μ œκ±°ν•˜λ©΄ μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€. λ¬Έμ œλŠ” 이벀트 이름이 change 인지 ν™•μΈν•˜λŠ” _onModelEvent 에 μžˆμŠ΅λ‹ˆλ‹€. 이 경우 μ „μ†‘λ˜λŠ” μ‹€μ œ 이벀트 이름은 change:id μž…λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰