μλ²μμλ°μ λͺ¨λΈ λ°μ΄ν° μ€ μΌλΆλ₯Ό μ
λ°μ΄νΈν΄μΌνμ΅λλ€. νμ¬ λ κ°μ§ μ΅μ
μ΄ μμ΅λλ€. 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
λ§ μ¬μ©νμμμ€.
μμ± λ³κ²½μ λλ½ νμ§ μκ³ μ€μ ν μ μμ΅λκΉ?
2014 λ 8 μ 1 μΌ μ€μ 7:28μ Jeremy Ashkenas [email protected] μ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
μ¬μ€μ μ νμΆκ΅¬λ‘, νμν κ²½μ° λλμΌλ‘ ν¨μ¨μ μΈ λ λλ§μ μ½κ² μν ν μ μμ΅λλ€.
κ·νμ κ²½μ°μλ μΈνΈλ₯Ό μ¬μ©νμμμ€.
β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
νΈμΆ Model.clear()
μ μ Model.set({})
κ·νμ κ²½μ°μ μλν©λλ€? μ΄λ κ²νλ©΄ νμ¬ μμ±μ νμ₯νμ§ μκ³ λμ λ체ν©λλ€. Model.clear()
λ λͺ¨λΈμμ λ κ°μ "λ³κ²½"μ΄λ²€νΈλ₯Ό νΈλ¦¬κ±°νμ§ μμΌλ €λ κ²½μ° μλ μ΅μ
λ μ§μν©λλ€.
μ΄ λ°©λ²μ΄ μλ€λ λ° λμν©λλ€. model.clear()
μ model.set()
λ₯Ό ν¨κ» μ¬μ©νλ κ²λ κ³ λ €νμ΅λλ€. κ·Έλ° λ€μ λ¬Έμ κ° λ°μνμ¬ change
μ΄λ²€νΈλ₯Ό λ λ² μ€ννμ΅λλ€.
model.clear()
νΈμΆ ν λ silent
μ΅μ
μ μ¬μ©νλ κ²μ μ΅μ
μ΄ μλλλ€. μμ±μ΄ μ€μ λμ§ μμ λ 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);
};
λΏ‘λΏ‘
λ μ΄λ:
Model.prototype.reset = function(attrs, options) {
for (var key in this.attributes) {
this.unset(key, {silent:true});
}
return this.set(attrs, options);
};
μλμ, λμμ΄λμ§ μμ΅λλ€. model.reset()
μ λ¬νλ μλ‘μ΄ attrs
ν΄μμλμλ λͺ¨λΈμ νμ¬ μμ± ν΄μμ foo
ν€κ° μλ€κ³ κ°μ ν΄λ³΄μμμ€. change:foo
μ΄λ²€νΈλ₯Όλ€μ λ μλ λͺ¨λμμ model.unset()
λ₯Ό μ¬μ©νκΈ° λλ¬Έμ μ κ° undefined
μΌλ‘ νΈλ¦¬κ±°λμ§ μμ΅λλ€.
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.attributesλ₯Ό λͺ
μ μ μΌλ‘ μ¬μ μνλ this.unset(key, options)
λ₯Ό μ¬μ©νλ κ²μ μ νν μ μμ§λ§ μ΄λ attrs[key] = void 0;
: panda_faceλ₯Ό κ΅μ²΄νλ λ¬Έμ μΌλΏμ
λλ€.
λ΄κ° μμ§ backbone.jsλ₯Ό μ²μ μ νκΈ° λλ¬Έμ λ΄κ° 보μ¬μ£Όλ 무μ§λ μ©μνμ§λ§ λ
Όμλλ λμμ Model.fetch
μ²λΌ λ€λ¦½λλ€. μ€λͺ
μ λ€μκ³Ό κ°μ΅λλ€.
μλ²μμ λͺ¨λΈμ μνλ₯Ό μ¬μ€μ ν©λλ€.
change
μ΄λ²€νΈκ° μ¬μ ν νΈλ¦¬κ±° λ κ²μ²λΌ 보μ΄μ§λ§ λͺ¨λΈμ "λλ½κ²"λ§λ€μ§λ μμ΅λλ€. μλ² μλ΅μ κΈ°λ°μΌλ‘ μμ±μ μ¬μ€μ νλ €λ κ²½μ°μ΄ λ°©λ²μ μ¬μ©ν μμλ μ΄μ κ° μμ΅λκΉ? μ΄λ¬ν μν©μ΄ λ°μν μμλ μ μΌν μν©μ λͺ¨λΈμ΄ λ€λ₯Έ μμ
μ λΆμμ©μΌλ‘ λ³κ²½λλ κ²½μ°λΌκ³ μκ°νμ§λ§ μΌλ°μ μΌλ‘ μ΄λ¬ν λΆμμ©μ μλͺ»λ νλ‘κ·Έλλ°μΌλ‘ κ°μ£Όλλ―λ‘ κ°λ₯νλ©΄ νΌν΄μΌν©λλ€. λΆμμ©μ νΌν μμλ κ²½μ° μ λͺ¨λΈ μμ± λμ "μ
λ°μ΄νΈ λͺ¨λΈ XYZ"μλ΅ νλκ·Έλ₯Ό μ μ‘νκ³ μ΄λ¬ν μλ΅μ λ³Ό λλ§λ€ fetch
νΈλ¦¬κ±°νλ κ²μ΄ λ ν©λ¦¬μ μΌ μ μμ΅λλ€.
λ€μ λ§νμ§λ§,μ΄ μ견μμ λ΄κ° 보μ¬μ£Όκ³ μλ λͺ¨λ 무μ§λ₯Ό μ©μνμμμ€.
@kolorahl ,
OPκ° λ¬μ±νκ³ μνλ κ²μ νμ¬ λͺ¨λΈ μμ±μ μ§μ°κ³ λͺ¨λΈμ μ μμ±μ΄λλ μ JSONμ μ λ¬νλ κ²μ λλ€. μ΄λ¬ν λ°©μμΌλ‘ μ΄λ―Έ JSONμ΄μλ κ²½μ° λ°±μλλ₯Ό 곡격νκ³ μΆμ§ μμ΅λλ€.
λλ κ·Έμ clear + set λ°©λ²μΌλ‘ @ lupugabriel1μ μ΄λ»κ² λ λμν©λλ€. νμ§λ§ μ΄κ²μ΄ κ³ λ €ν΄μΌ ν κΈ°λ₯ μ€ νλλΌκ³ μκ°ν©λλ€. Backbone.Collection # resetκ³Ό κ°μ κ²
μ΄κ²μ΄ νμν μ΄μ λ μΈμμ΄ λ³νκ³ μκΈ° λλ¬Έμ λλ€. Backboneμ Model # fetch () XHRμ΄ μλ²μμ λ°μ΄ν°λ₯Όλ‘λνλ κΈ°λ³Έ λ°©λ²μ΄λΌκ³ κ°μ νμ§λ§ μΉ μμΌμ μ¬μ©νμ¬ λ λ§μ μμ μ μννκ³ μμ΅λλ€. λ°μ΄ν°κ° ν΄λΌμ΄μΈνΈλ‘ νΈμλλ©΄ .fetchλ₯Ό νΈμΆνλ κ²μ΄ μ€λ³΅λλ©° λ°μ΄ν°λ₯Ό μ¬μ΄λλ‘λνκ³ νΈλ¦¬κ±° ν μ΄λ²€νΈ νν¬λ₯Ό μ»μ μμλ μ μ ν λ°©λ²μ΄ νμν©λλ€.
#set
λ₯Ό μ¬μ©νμ§ μλ μ΄μ λ 무μμ
λκΉ?
#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
μνκ° μλ²μ λκΈ°νλμ§ μμ μνλ‘ λ³κ²½λ κ²½μ°μλ μ€μ ν΄λ μ’μ§λ§ μνλ₯Ό μλ²μ λκΈ°νλ‘ νμ ν λ°©λ²μ΄ μκΈ° λλ¬Έμ Model # resetμ΄ νμν©λλ€.
μ΄ κΈ°λ₯μ λν΄ λ€λ₯Έ μμμ΄ ν¨μΉλ₯Ό μμ±νμ΅λλ€.
/**
* 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
λλ½ λ νλͺ©λ μ€μ ν΄μ ν΄μΌν©λλ€. Model # set (attributes)μ΄ μμ νλμ§ νμ€νμ§ μμ΅λλ€.
@lennerdκ° μ§μ νλ―μ΄ clear()
λ€μμ set()
νΈμΆνλ κ²μ μ’μ μ΅μ
μ΄ μλλλ€.
1) λ κ°μ change
μ΄λ²€νΈλ₯Ό μ€ννκ³
2) clear
νΈμΆμμ silent:true
λ₯Ό μ¬μ©νλ©΄ μ€μ λμ§ μμ μμ±μ λν λ³κ²½ μ΄λ²€νΈκ° λ°μνμ§ μμ΅λλ€.
collection.reset()
λ λ§€μ° μ§κ΄μ μ΄λ©° Model
λ λμΌν λ°©λ²μ μ¬μ©νλ©΄ μ€μ λ‘ μ΄μ μ μ»μ μ μλ€κ³ μκ°ν©λλ€. λλ νμ model.reset(attrs)
λ₯Ό μ¬μ©νλ €κ³ νλλ°, κ·Έκ²μ΄ μμΌλ©΄ νμ μ€λ§ν©λλ€. :(
μ λ Backbone.Model : Backbone-Model-Resetμ μλνλ reset
λ©μλλ₯Ό μΆκ°νκΈ° μν΄ μ½κ°μ νμ₯μ λ§λ€μμ΅λλ€.
λμ-κΈ°λ³Έμ μΌλ‘ κ°λ κ²μ΄ μ μ©ν©λλ€. clear ()μ²λΌ 'id'μμ±μ λ³κ²½νμ§ μκ³ μμ±μ μ¬μ€μ ν΄μΌνμ΅λλ€. μ¬κΈ° μ κ·Έκ² μ
@thesmart , Model # setμ λλ½ λ μμ±μ μ€μ ν΄μ νμ§ μμΌλ―λ‘ Model # resetμ΄ νμνλ€κ³ μκ°ν©λλ€.
μ΄μλ₯Ό μ’ κ²° ν λ μ΄μ λ₯Ό μ μν΄μΌν©λλ€. @ akre54 κ° μ http://backbonejs.org/#Getting -startedμμ
μ² νμ μΌλ‘ Backboneμ JavaScriptλ‘ μΉ μ ν리μΌμ΄μ μ κ΅¬μΆ ν λ μΌλ°μ μΌλ‘ μ μ©ν μ΅μνμ λ°μ΄ν° ꡬ쑰 (λͺ¨λΈ λ° μ»¬λ μ ) λ° μ¬μ©μ μΈν°νμ΄μ€ (λ·° λ° URL) κΈ°λ³Έ μμλ₯Ό λ°κ²¬νλ €λ μλμ λλ€.
λ΄κ° μ μμλ ν, Backboneμ λ°μ΄ν° λͺ¨λΈμ RESTμ νΈνλμ§ μμ΅λλ€.
ν΄λΌμ΄μΈνΈμμ μλ² μνλ₯Ό μμ νκ² λͺ¨λΈλ§ ν μμλ λ°©λ²μ΄ μκΈ° λλ¬Έμ
λλ€.
λͺ¨λΈμ΄ ꡬμΆλμμ΅λλ€. μλ‘μ΄ λͺ¨λΈμ ꡬμΆνλ κ²μ΄
μ¬μ€μ νμ§ μκ³ μλ‘μ΄ μν.
2016 λ 7 μ 5 μΌ νμμΌμ pgifford [email protected] μ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
@thesmart https://github.com/thesmart , Model # setκ° λλ½λμ§ μμμ΅λλ€.
κ·Έλμ Model # resetμ΄ νμνλ€κ³ μκ°ν©λλ€.μ΄μλ₯Ό μ’ κ²° ν λ μ΄μ λ₯Ό μ μν΄μΌν©λλ€. μ λΆμ¦
@ akre54 https://github.com/akre54 κ° μ μ΄κ²μ λ«μλμ§ μκ³ μΆμ΅λλ€.
λ°±λ³Έ λͺ¨λΈμ μλμ μΌλ‘ μμμ μ΄λ©° μκ²¬μ΄ μμ΅λλ€.
Model # resetμ λΆμ‘±μ λͺ¨λΈμ΄ μ΄λ»κ² μ¬μ©λλμ§μ λν μ견μ ννν©λλ€. μμ
http://backbonejs.org/#Getting -startedμ² νμ μΌλ‘ λ°±λ³Έμ μ΅μνμ μΈνΈλ₯Ό λ°κ²¬νλ €λ μλμ λλ€.
λ°μ΄ν° ꡬ쑰ν (λͺ¨λΈ λ° μ»¬λ μ ) λ° μ¬μ©μ μΈν°νμ΄μ€ (보기 λ°
URL) μΉ μ ν리μΌμ΄μ μ λΉλ ν λ μΌλ°μ μΌλ‘ μ μ©ν κΈ°λ³Έ μμ
JavaScriptλ‘.β
λΉμ μ΄ μΈκΈ λμκΈ° λλ¬Έμ μ΄κ²μ λ°κ³ μμ΅λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ³ GitHubμμ νμΈνμΈμ.
https://github.com/jashkenas/backbone/issues/3253#issuecomment -230586424,
λλ μ€λ λ μμκ±°
https://github.com/notifications/unsubscribe/AARJLQ8-BGeV0X_owHVpyPQAdeiMweNMks5qSriDgaJpZM4CTBHH
.
λλ reset
λͺ¨λΈμ΄ νμνκ³ Backboneμ _spirit_μμ λ§λ€μμ΅λλ€. λλ μ΄κ²μ Backboneμ κ°μΈμ μΈ νμ₯μμ μ¬μ©ν©λλ€.
κΈ°λ³Έκ°μ λ€μ λͺ¨λΈμ λ³ν©νμ¬ μ΄κΈ°ν ν λμ²λΌ μ λ¬ λ μμ±μ μ¬μ μ ν μ μκΈ° λλ¬Έμ λ¨μν .clear
λ€μμ .set
.clear
μ€λ κ²λ³΄λ€ λ«μ΅λλ€.
/**
* 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);
},
silent: true
κ° μλ κ²½μ° μ¬μ©μ μ§μ model:reset
μ΄λ²€νΈ μΈμλ λ³κ²½ μ΄λ²€νΈ ( 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 , Model # setμ λλ½ λ μμ±μ μ€μ ν΄μ νμ§ μμΌλ―λ‘ Model # resetμ΄ νμνλ€κ³ μκ°ν©λλ€.
μ΄μλ₯Ό μ’ κ²° ν λ μ΄μ λ₯Ό μ μν΄μΌν©λλ€. @ akre54 κ° μ http://backbonejs.org/#Getting -startedμμ