рдХреГрдкрдпрд╛ рдмреИрдХрдмреЛрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЪрд░рдгреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреА рдерд╛рд╣ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдкреНрд░рдЬрдирди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ рджреЗрдЦреЗрдВ рдЬреЛ 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()
;
рд╣рд╛рдВ рджрд┐рд▓рдЪрд╕реНрдкред рдЬрдм рд╣рдо рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдореЙрдбрд▓ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, __byId_ рджреЛ рдЧреБрдг рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ: model.id рдФрд░ model.cid, рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рд╕рдВрджрд░реНрднред 1134 рд▓рд╛рдЗрди рдкрд░ рдЬрд╛рд░реА, id === undefined , рд▓реЗрдХрд┐рди __byId_ рдореЗрдВ model.id - _'foo'_ рд╢рд╛рдорд┐рд▓ рд╣реИред
рдЬрдм model.id рдХреЛ value == null рдореЗрдВ рдмрджрд▓реЗрдВ, рддреЛ Collection рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рддрд░реНрдХ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд▓рд╛рдЗрди 1183 рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рд╕реЗрдЯ _null_ рдпрд╛ _undefined_ рдХреЛ рд╕реЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред this.model.set ('рдЖрдИрдбреА', рдЕрд╢рдХреНрдд);
рдкреАрдПрд╕: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреА рдореЙрдбрд▓ рдЖрдИрдбреА рдХреЛ рд╢реВрдиреНрдп рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реИред
рд╣рд╛рдБ тАФ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрднреА рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдПрдХ рдмрдЧ рд╣реИред
рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрджрд┐ рдХреЛрдИ id
рдПрдХ рдорд╛рди рд╕реЗ null
, рддреЛ рд╣рдо рдкрд╣рд▓реЗ delete this._byId[id]
ред
рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдИрд╡реЗрдВрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдХрд┐рд╕реА рдореЙрдбрд▓ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ _onModelEvent
рдЬреЛ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдШрдЯрдирд╛ рдХрд╛ рдирд╛рдо change
, рдЬрдм рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдШрдЯрдирд╛ рдХрд╛ рдирд╛рдо рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ change:id
ред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╣рд╛рдБ тАФ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрднреА рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдПрдХ рдмрдЧ рд╣реИред
рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрджрд┐ рдХреЛрдИ
id
рдПрдХ рдорд╛рди рд╕реЗnull
, рддреЛ рд╣рдо рдкрд╣рд▓реЗdelete this._byId[id]
ред