Backbone: рд╕рдВрдЧреНрд░рд╣ рдХрд┐рд╕реА рдирд┐рдХрд╛рд▓реЗ рдЧрдП рдореЙрдбрд▓ рдХреЗ рдЖрдВрддрд░рд┐рдХ `_byId` рд╕рдВрджрд░реНрдн рдХреЛ рдирд╣реАрдВ рдорд┐рдЯрд╛рддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рд╕рд┐рддре░ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jashkenas/backbone

рдХреГрдкрдпрд╛ рдмреИрдХрдмреЛрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЪрд░рдгреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреА рдерд╛рд╣ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдкреНрд░рдЬрдирди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ рджреЗрдЦреЗрдВ рдЬреЛ Collection рдХреЛ рдЖрдВрддрд░рд┐рдХ рднреНрд░рдо рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ JSFiddle рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдкреНрд░рддрд┐ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ collection рдПрдХ рдЖрдВрддрд░рд┐рдХ ( _byId ) рдХреЛ рдПрдХ 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 рдореЗрдВ рдмрджрд▓реЗрдВ, рддреЛ Collection рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рддрд░реНрдХ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд▓рд╛рдЗрди 1183 рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рд╕реЗрдЯ _null_ рдпрд╛ _undefined_ рдХреЛ рд╕реЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред this.model.set ('рдЖрдИрдбреА', рдЕрд╢рдХреНрдд);

рдкреАрдПрд╕: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреА рдореЙрдбрд▓ рдЖрдИрдбреА рдХреЛ рд╢реВрдиреНрдп рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реИред

backbone_remove

backbone_model_event

рд╣рд╛рдБ тАФ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрднреА рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдПрдХ рдмрдЧ рд╣реИред

рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрджрд┐ рдХреЛрдИ id рдПрдХ рдорд╛рди рд╕реЗ null , рддреЛ рд╣рдо рдкрд╣рд▓реЗ delete this._byId[id] ред

рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдИрд╡реЗрдВрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдХрд┐рд╕реА рдореЙрдбрд▓ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ _onModelEvent рдЬреЛ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдШрдЯрдирд╛ рдХрд╛ рдирд╛рдо change , рдЬрдм рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдШрдЯрдирд╛ рдХрд╛ рдирд╛рдо рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ change:id ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

inf3rno picture inf3rno  ┬╖  17рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sarkasm picture sarkasm  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rubiii picture rubiii  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zowers picture zowers  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

spawnedc picture spawnedc  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ