рдореБрдЭреЗ рдПрдХ рдореЙрдбрд▓ рдХреЗ рдХреБрдЫ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдЬреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдЖрдпрд╛ рдерд╛ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: Model.set
рдХреЙрд▓ рдХрд░реЗрдВ, рдпрд╛ рд╕реАрдзреЗ Model.attributes
рд╕реЗрдЯ рдХрд░реЗрдВред рдореИрдВ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рджрд░реНрдЬ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ silent
рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рддреЛ, рдореИрдВрдиреЗ рдПрдХ рдмрдВрджрд░ рдкреИрдЪ рд▓рд┐рдЦрд╛:
Backbone.Model.prototype.reset = (attributes, options) ->
attrs = attributes || {};
if options.parse
attrs = this.parse(attrs, options) || {}
@set(attrs, options);
<strong i="9">@changed</strong> = {};
рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ Backbone.Model
Backbone.Collection
рддрд░рд╣ рд░реАрд╕реЗрдЯ рдкрджреНрдзрддрд┐ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?
рд░реАрд╕реЗрдЯ рдПрдХ рдПрд╕реНрдХреЗрдк рд╣реИрдЪ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрд▓реНрдХ рдореЗрдВ рдХреБрд╢рд▓ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ set
ред
рдХреНрдпрд╛ рдЖрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЧрдВрджрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдЕрдЧрд╕реНрдд рез, реирежрезрек рдХреЛ рд╕реБрдмрд╣ AM:реи, рдмрдЬреЗ, рдЬреЗрд░реЗрдореА рдПрд╢рдХреЗрдирд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:
рд░реАрд╕реЗрдЯ рдПрдХ рдПрд╕реНрдХреЗрдк рд╣реИрдЪ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрд▓реНрдХ рдореЗрдВ рдХреБрд╢рд▓ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдкрдиреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВред
Model.clear()
Model.set({})
рд╕реЗ рдкрд╣рд▓реЗ рдХреЙрд▓ рдХрд░рдирд╛ рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛? рдЗрд╕ рддрд░рд╣ рдЖрдк рд╡рд░реНрддрдорд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдк рдореЙрдбрд▓ рдкрд░ рджреЛ "рдкрд░рд┐рд╡рд░реНрддрди" рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ Model.clear()
рднреА рдореВрдХ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рддрд░реАрдХрд╛ рдЧрд╛рдпрдм рд╣реИред рдореИрдВрдиреЗ рд╕рдВрдпреЛрдЬрди рдореЗрдВ model.clear()
рдФрд░ model.set()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реЛрдЪрд╛ред рдлрд┐рд░ рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рднрд╛рдЧ рдЧрдпрд╛, рдХрд┐ рдЕрдм рдореИрдВ change
рдЗрд╡реЗрдВрдЯ рдХреЛ рджреЛ рдмрд╛рд░ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реВрдВред
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП silent
рдЬрдм рдмреБрд▓рд╛ рд╡рд┐рдХрд▓реНрдк model.clear()
, рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рднреА рдПрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ change
рдЬрдм рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕реЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдШрдЯрдирд╛ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ред
model.reset()
рд╡рд┐рдзрд┐ рдПрдХ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реИрд╢ рд▓реЗрддреА рд╣реИ рдФрд░ рдкреБрд░рд╛рдиреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП undefined
рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╣реИрд╢ рдХреЛ рднрд░ рджреЗрддреА рд╣реИ рдЬреЛ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИрд╢ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
Model.prototype.reset = function(attrs, options) {
for (var key in this.attributes) {
if (key in attrs) continue;
attrs[key] = void 0;
}
return this.set(attrs, options);
};
@lennerd
рд╡реНрд╣рд╛рдЯ рдЕрдмрд╛рдЙрдЯ:
Model.prototype.reset = function(attrs, options) {
for (var key in this.attributes) {
this.unset(key, {silent:true});
}
return this.set(attrs, options);
};
рдирд╣реАрдВ, рдпрд╣ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдореЙрдбрд▓ рдХреА рд╡рд░реНрддрдорд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╣реИрд╢ рдореЗрдВ рдПрдХ рдХреБрдВрдЬреА foo
рд╣реИ, рдЬреЛ рдХрд┐ рдирдП attrs
рд╣реИрд╢ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЖрдк model.reset()
ред рдЬрдм рдореИрдВ change:foo
рдШрдЯрдирд╛ рд╕реБрдирддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдирдП рдореВрд▓реНрдп undefined
рд╕рд╛рде рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рд╕рд╛рдЗрд▓реЗрдВрдЯ рдореЛрдб рдореЗрдВ model.unset()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред
Backbone.Model.prototype.reset = function(attrs, options) {
for (var key in this.attributes) {
this.unset(key, {silent:true});
}
return this.set(attrs, options);
};
var bar = new Backbone.Model();
bar.on('change', function(model) {
console.log('The model bar has been changed.');
});
bar.on('change:foo', function(model, foo) {
console.log('Foo has been changed to: ' + foo);
});
bar.set(foo, 'test');
// => The model bar has been changed.
// => Foo has been changed to: test
bar.reset({ foo2: 'test2' });
// => The model bar has been changed.
// Foo was resetted but no change event has been triggered.
рдХреВрд▓, рдореБрдЭреЗ рддреБрдорд╕реЗ рдорддрд▓рдм рд╣реИред рдореИрдВ рд╢рд╛рдпрдж this.unset(key, options)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдиреВрдВрдЧрд╛ред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ attrs[key] = void 0;
рд╕реНрд╡реИрдк рдХрд░рдиреЗ рдХреА рдмрд╛рдд рд╣реИ: panda_face:
рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдП рдЧрдП рдХрд┐рд╕реА рднреА рдЕрдЬреНрдЮрд╛рди рдХреЛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЕрднреА рднреА рдмреИрдХрдмреЛрди.рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдпрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬрд┐рд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ рд╡рд╣ Model.fetch
рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рд╡рд░реНрдгрди рдХрд╣рддрд╛ рд╣реИ:
рд╕рд░реНрд╡рд░ рд╕реЗ рдореЙрдбрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ change
рдЗрд╡реЗрдВрдЯ рдЕрднреА рднреА рдЯреНрд░рд┐рдЧрд░ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореЙрдбрд▓ рдХреЛ "рдЧрдВрджрд╛" рди рдХрд░реЗрдВред рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдореИрдВ рдХреЗрд╡рд▓ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрдм рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдореЙрдбрд▓ рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдмрджрд▓ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рдРрд╕реЗ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЛ рдЦрд░рд╛рдм рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЗрд╕реЗ рдЯрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯ рд╕реЗ рдмрдЪрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдирдП рдореЙрдбрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрдЬрд╛рдп "рдЕрдкрдбреЗрдЯ рдореЙрдбрд▓ XYZ" рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдзреНрд╡рдЬ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рдЬрдм рднреА рдЖрдк рдРрд╕реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ fetch
рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред
рджреЛрдмрд╛рд░рд╛, рдХрд┐рд╕реА рднреА рдЕрдЬреНрдЮрд╛рдирддрд╛ рдХреЛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЬреЛ рдореИрдВ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
@kolorahl ,
рдУрдкреА рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдореМрдЬреВрджрд╛ рдореЙрдбрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ рдФрд░ рдПрдХ рдирдпрд╛ JSON рдкрд╛рд╕ рдХрд░рдирд╛ рдЬреЛ рдореЙрдбрд▓ рдХреА рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдмрди рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░реАрдХреЗ рд╕реЗ, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреИрдХреЗрдВрдб рдХреЛ рд╣рд┐рдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА JSON рд╣реИред
рдореИрдВ рдХрд┐рд╕реА рддрд░рд╣ @ lupugabriel1 рдХреЗ рд╕рд╛рде рдЙрдирдХреА рд╕реНрдкрд╖реНрдЯ + рд╕реЗрдЯ рд╡рд┐рдзрд┐ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Backbone.Collection # рд░реАрд╕реЗрдЯ рдЬреИрд╕рд╛ рдХреБрдЫ
рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдХреНрдпреЛрдВрдХрд┐ рджреБрдирд┐рдпрд╛ рдмрджрд▓ рд░рд╣реА рд╣реИред рдмреИрдХрдмреЛрди рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ # рднреНрд░реВрдг () XHR рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХ рд╡рд┐рдзрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рд╡реЗрдмрд╕реНрдХреИрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рди рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЬрдм рдбреЗрдЯрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдзрдХреЗрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрдорд╛рдиреА рд╣реИред рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдЗрдб-рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рднреНрдп рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдлрд┐рд░ рднреА рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдИрд╡реЗрдВрдЯ рд╣реБрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдк #set
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
@jridgewell рдХреНрдпреЛрдВрдХрд┐ #set рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЧрдВрджрд╛ рдХрд░ рджреЗрдЧрд╛ред рдЖрдЗрдП рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрдЦреЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:
function callback(data_from_server) {
console.info(data_from_server);
m = new Backbone.Model(data_from_server);
m.set('foo', 'what?', {silent: true});
console.info(m.changedAttributes())
}
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо:
{foo: 'bar'}
{foo: "what?"}
рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо:
{foo: 'bar'}
false
рд╕реЗрдЯ рддрдм рдареАрдХ рд╣реИ рдЬрдм рд░рд╛рдЬреНрдп рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдЖрдЙрдЯ-рдСрдл-рд╕рд┐рдВрдХ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЙрдбрд▓ # рд░реАрд╕реЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ w / рд╕рд░реНрд╡рд░ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд╛рдЬреНрдп рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдмрдВрджрд░ рдкреИрдЪ рд▓рд┐рдЦрдирд╛ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛:
/**
* Allow for side-loading data from the server, calling the sync event afterwards.
* <strong i="6">@param</strong> attributes
* <strong i="7">@param</strong> options
*/
Backbone.Model.prototype.sync_set = function(attributes, options) {
var attrs = attributes || {};
if (options.parse) {
attrs = this.parse(attrs, options) || {}
}
this.set(attrs, options);
this.changed = {};
this.trigger('sync', this, attributes, options);
return this;
}
function callback(data_from_server) {
console.info(data_from_server);
m = new Backbone.Model(data_from_server);
m.set('foo', 'what?', {silent: true});
console.info(m.changedAttributes())
}
{foo: 'bar'}
false
рдпрд╣ рд╢рд╛рдпрдж рд▓рд╛рдкрддрд╛ рдЖрдЗрдЯрдо рднреА рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рдореЙрдбрд▓ # рд╕реЗрдЯ (рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ) рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ @lennerd рдиреЗ рдмрддрд╛рдпрд╛, clear()
рдмрд╛рдж set()
рдХрд╛ рдХреЙрд▓ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣
1) рдЖрдЧ рджреЛ change
рдШрдЯрдирд╛рдУрдВ рдФрд░
2) рдпрджрд┐ рдЖрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ silent:true
рдкрд░ clear
рдХреЙрд▓, рдЖрдк рдЧреБрдг рдЬреЛ рд╕реЗрдЯ рдирд╣реАрдВ рдереЗ рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдШрдЯрдирд╛рдУрдВ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред
collection.reset()
рдмрд╣реБрдд рд╕рд╣рдЬ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Model
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдордХрдХреНрд╖ рд╡рд┐рдзрд┐ рд╕реЗ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЦреБрдж рдХреЛ рд╣рд░ рд╕рдордп model.reset(attrs)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╣рдореЗрд╢рд╛ рдирд┐рд░рд╛рд╢ рдЬрдм рдпрд╣ рдирд╣реАрдВ рд╣реИред :(
рдореИрдВрдиреЗ рдЖрдЧреЗ рдмрдврд╝ рдХрд░ рдмреИрдХрдмреЛрди рдХреЗ рд▓рд┐рдП рдПрдХ reset
рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ред рдмреИрдХрдмреЛрди-рдореЙрдбрд▓-рд░реАрд╕реЗрдЯ
рд╕рд╣рдордд - рдореВрд▓ рд░реВрдк рд╕реЗ рд╣реЛрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдореБрдЭреЗ 'id' рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдореИрдиреНрдЯреЗрди рдХрд┐рдП рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрдкрд╖реНрдЯ () рдХрд░ рд░рд╣рд╛ рдерд╛ред рдпрд╣рд╛рдБ рдЗрд╕рдХрд╛ рд╕рд╛рд░ рд╣реИ ред
@thesmart , рдореЙрдбрд▓ # рд╕реЗрдЯ рдореЗрдВ рдЧреБрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ # рд░реАрд╕реЗрдЯ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдХрд┐рд╕реА рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рддреЗ рд╕рдордп рдПрдХ рдХрд╛рд░рдг рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ @ akre54 рдиреЗ рдЗрд╕реЗ рдХреНрдпреЛрдВ рдмрдВрдж рдХрд┐рдпрд╛ред рдмреИрдХрдмреЛрди рдореЙрдбрд▓ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЖрджрд┐рдо рдФрд░ рдЕрдиреЛрдкрд┐рдирд┐рдпреЗрдЯреЗрдб рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЙрдбрд▓ # рд░реАрд╕реЗрдЯ рдХреА рдХрдореА рдЗрд╕ рдмрд╛рдд рдкрд░ рдПрдХ рд░рд╛рдп рд╡реНрдпрдХреНрдд рдХрд░рддреА рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Http://backbonejs.org/#Getting -started рд╕реЗ
рджрд╛рд░реНрд╢рдирд┐рдХ рд░реВрдк рд╕реЗ, рдмреИрдХрдмреЛрди рдбреЗрдЯрд╛-рд╕реНрдЯреНрд░рдХреНрдЪрд░рд┐рдВрдЧ (рдореЙрдбрд▓ рдФрд░ рд╕рдВрдЧреНрд░рд╣) рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рд╡рд┐рдЪрд╛рд░ рдФрд░ URL) рдЖрджрд┐рдорддрд╛ рдХреЗ рдиреНрдпреВрдирддрдо рд╕реЗрдЯ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рдпрд╛рд╕ рд╣реИ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВред
рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдБ, Backbone рдХрд╛ рдбреЗрдЯрд╛ рдореЙрдбрд▓ REST рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИ
рдХреНрдпреЛрдВрдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдмрд╛рдж рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЧрдВрднреАрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдореЙрдбрд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ
рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдирдпрд╛ рдореЙрдбрд▓ рдмрдирд╛рдирд╛ рд╣реА рдПрдХрдорд╛рддреНрд░ рд░рд╛рд╕реНрддрд╛ рд╣реИ
рд░реАрд╕реЗрдЯ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рддрд╛рдЬрд╛ рд╕реНрдерд┐рддрд┐ред
рдордВрдЧрд▓рд╡рд╛рд░, 5 рдЬреБрд▓рд╛рдИ 2016 рдХреЛ, pgifford рд╕реВрдЪрдирд╛рдПрдВ @github.com рдиреЗ рд▓рд┐рдЦрд╛:
@thesmart https://github.com/thesmart , рдореЙрдбрд▓ # рд╕реЗрдЯ рдЧрд╛рдпрдм рдирд╣реАрдВ рд╣реИ
рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ рдореЙрдбрд▓ # рд░реАрд╕реЗрдЯ рдЖрд╡рд╢реНрдпрдХ рд╣реИредрдХрд┐рд╕реА рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рддреЗ рд╕рдордп рдПрдХ рдХрд╛рд░рдг рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рд╣реЛ
рдпрд╣ рдЬрд╛рдирдирд╛ рдкрд╕рдВрдж рд╣реИ рдХрд┐ @ akre54 https://github.com/akre54 рдиреЗ рдЗрд╕реЗ рдХреНрдпреЛрдВ рдмрдВрдж рдХрд┐рдпрд╛ред
рд░реАрдврд╝ рдХреА рд╣рдбреНрдбреА рдХреЗ рдореЙрдбрд▓ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЖрджрд┐рдо рдФрд░ рдЕрдирдкрдврд╝ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐,
рдореЙрдбрд▓ # рд░реАрд╕реЗрдЯ рдХреА рдХрдореА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд░рд╛рдп рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реЗ
http://backbonejs.org/#Getting -startedрджрд╛рд░реНрд╢рдирд┐рдХ рд░реВрдк рд╕реЗ, рдмреИрдХрдмреЛрди рдиреНрдпреВрдирддрдо рд╕реЗрдЯ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рдпрд╛рд╕ рд╣реИ
рдбреЗрдЯрд╛-рд╕рдВрд░рдЪрдирд╛ (рдореЙрдбрд▓ рдФрд░ рд╕рдВрдЧреНрд░рд╣) рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рджреГрд╢реНрдп рдФрд░
URL) рдкреНрд░рд╛рдЗрдорд┐рдЯрд┐рд╡ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВ
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рдеред-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/jashkenas/backbone/issues/3253#issuecomment -230586424,
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe/AARJLQ8-BGeV0X_owHVpyPQAdeiMweNMks5qSriDgaJpZM4CTBHH
ред
рдореБрдЭреЗ рдПрдХ рдореЙрдбрд▓ reset
рдФрд░ рдЙрд╕рдиреЗ рдЖрдЧреЗ рдмрдврд╝рдХрд░ Backbone рдХреЗ _spirit_ рдореЗрдВ рдЗрд╕реЗ рдмрдирд╛рдпрд╛ред рдореИрдВ рдмреИрдХрдмреЛрди рдХреЗ рдЕрдкрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг .clear
рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж .set
рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбрд┐рдлреЙрд▓реНрдЯреНрд╕ рдХреЛ рдореЙрдбрд▓ рдореЗрдВ рд╡рд╛рдкрд╕ рдорд┐рд▓рд╛ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХрд┐рд╕реА рднреА рдЙрддреНрддреАрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЖрд░рдВрднреАрдХрд░рдг рдХреА рддрд░рд╣ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
/**
* Clears the model's attributes and sets the default attributes.
* <strong i="10">@param</strong> {Object} attributes to overwrite defaults
* <strong i="11">@param</strong> {Object} options to pass with the "set" call.
* <strong i="12">@return</strong> {Backbone.Model} this object, to chain function calls.
*/
reset: function(attributes, options) {
options = _.extend({ reset: true }, options);
// ensure default params
var defaults = _.result(this, 'defaults'),
attrs = _.defaults(_.extend({}, defaults, attributes || {}), defaults);
// apply
this._reset(attrs, options);
// triggers a custom event, namespaced to model in order
// to avoid collision with collection's native reset event
// when listening to a collection.
if (!options.silent) this.trigger('model:reset', this, options);
return this;
},
/**
* Private method to help wrap reset with a custom behavior in child
* classes.
* <strong i="13">@param</strong> {Object} attributes to overwrite defaults
* <strong i="14">@param</strong> {Object} options to pass with the "set" call.
*/
_reset: function(attrs, options) {
this.clear({ silent: true }).set(attrs, options);
},
рдпрд╣ рдХрд╕реНрдЯрдо model:reset
рдШрдЯрдирд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ silent: true
рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдИрд╡реЗрдВрдЯреНрд╕ ( change
рдФрд░ change:attribute
) рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЗрд╡рд▓ model:reset
рдШрдЯрдирд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВрдиреЗ lennerd https://github.com/jashkenas/backbone/issues/3253#issuecomment -58789524 рдХреЛ рдереЛрдбрд╝рд╛-рдереЛрдбрд╝рд╛ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИред
Backbone.Model.prototype.reset = function(attrs, options) {
var missing = {};
for (var key in this.attributes) {
if (key in attrs) continue;
attrs[key] = undefined;
missing[key] = true;
}
// trigger all change events at the same time
this.set(attrs, options);
// remove missing attributes completely
for (var key in missing) {
// no silent option here in case attributes changed again meanwhile (edge case)
this.unset(key)
}
return this;
};
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@thesmart , рдореЙрдбрд▓ # рд╕реЗрдЯ рдореЗрдВ рдЧреБрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ # рд░реАрд╕реЗрдЯ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдХрд┐рд╕реА рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рддреЗ рд╕рдордп рдПрдХ рдХрд╛рд░рдг рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ @ akre54 рдиреЗ рдЗрд╕реЗ рдХреНрдпреЛрдВ рдмрдВрдж рдХрд┐рдпрд╛ред рдмреИрдХрдмреЛрди рдореЙрдбрд▓ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЖрджрд┐рдо рдФрд░ рдЕрдиреЛрдкрд┐рдирд┐рдпреЗрдЯреЗрдб рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЙрдбрд▓ # рд░реАрд╕реЗрдЯ рдХреА рдХрдореА рдЗрд╕ рдмрд╛рдд рдкрд░ рдПрдХ рд░рд╛рдп рд╡реНрдпрдХреНрдд рдХрд░рддреА рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Http://backbonejs.org/#Getting -started рд╕реЗ