μ°λ¦¬ νμ ν₯λ―Έλ‘μ΄ λ°μ΄ν° μ€ν€λ§λ‘ μμ
νκ³ μμ΅λλ€. κΈ°λ³Έμ μΌλ‘ μ°λ¦¬κ° κ°μ§κ³ μλ κ²μ μ΄λ¦κ³Ό λ²μ , κ·Έλ¦¬κ³ κ·Έκ²μ μνλ νλͺ©λ€μ λ°°μ΄μ΄ μλ λ¬Έμμ
λλ€. νλͺ© μ체μλ λ ν° λͺ¨λΈμ μνκΈ° λλ¬Έμ μ°κ²°λ IDκ° μμ§λ§ κΈ°λ³Έ λ¬Έμμμ νλͺ©μ μΆκ°/νΈμ§/μμ ν μ μμ΅λλ€. λͺ¨λΈμ λ€μκ³Ό κ°μ΅λλ€.
{
μ΄λ¦: "ν
μ€νΈ",
λ²μ : 1,
νλͺ© : [
{μ΄λ¦: "νλͺ© 1",
μμΉ : 0},
{μ΄λ¦: "νλͺ© 2",
μμΉ : 1}]
}
λͺ¨λΈμ κΈ°λ³Έ νλͺ©μ 컬λ μ μ μ¬μ©νλ κ²μ΄ μ’μ§λ§ 컬λ μ μ΄ μ λ°μ΄νΈλ λλ§λ€ λͺ¨λΈμ URLκ³Ό ν¨κ» μλ²μ λ€μ κ²μν΄μΌ ν©λλ€. λ°±λ³Έμμ μ΄κ²μ λͺ¨λΈλ§νλ κ°μ₯ μ’μ λ°©λ²μ 무μμ λκΉ? λ λ§μ μ λ³΄κ° νμνλ©΄ μμ μ λ λ§μ΄ κ²μνκ² λμ΄ κΈ°μ©λλ€.
λ κ°μ§ μ£Όμ μ΅μ μ΄ μμ΅λλ€. 첫 λ²μ§Έλ νλͺ©μ λ°λλΌ μμ±μΌλ‘ λλ κ²μ λλ€. λ°±λ³Έμ μμ±μ΄ λ³κ²½λ λ μ¬μΈ΅ λλ± κ²μ¬λ₯Ό μ¬μ©νλ―λ‘ λ΄λΆ νλͺ©μ΄ μ λ°μ΄νΈλλ©΄ λ¬Έμμμ μ΄μ λν΄ μ μ μμ΅λλ€.
λ€λ₯Έ μ΅μ μ λ¬Έμμμ νλͺ©μ κ°μ Έμ λ¬Έμμ κ³ μ λ 컬λ μ λ΄λΆμμ μ체μ μΌλ‘ λͺ¨λΈλ‘ 첨λΆνλ κ²μ λλ€(DocumentCloudμμ μ΄λ¬ν νμ λ°λΌ μμ μ μνν©λλ€). μλ₯Ό λ€μ΄(λλ΅μ μΌλ‘):
var Document = Backbone.Model.extend({
initialize: function() {
this.items = new ItemSet();
this.items.bind('change', this.save);
}
});
λ μ€ νλκ° λΉμ μ μν΄ μ μλν©λκΉ?
λν νλͺ©μμ νμν λ μ‘μΈμ€ν μ μλ Document κ°μ²΄μ "document" μμ±μ λ€μ μΆκ°νλ κ²μ΄ μ’μ΅λλ€.
var Document = Backbone.Model.extend({
initialize: function() {
this.items = new ItemSet(this.get('items'), {document: this});
this.items.bind('change', this.save);
}
});
var ItemSet = Backbone.Collection.extend({
initialize: function(models, options) {
this.document = options.document;
}
});
var Item = Backbone.Model.extend({
// access document with this.collection.document
});
var document1 = new Document({
name: "Test",
version: 1,
items: [
{name : "Item 1", position : 0},
{name : "Item 2", position : 1}
]
});
νλͺ©μ λ³κ²½ μ΄λ²€νΈλ₯Ό λ¬Έμ μ μ₯μ λ°μΈλ©νλ κ²μ΄ λλ½λ λΆλΆμ΄λΌκ³ μκ°ν©λλ€. νμ§λ§ ItemSetμ λ¬Έμλ₯Ό μΆκ°νλ κ²λ λ§€μ° λμμ΄ λ κ² κ°μ΅λλ€. μ°λ¦¬λ μ€λ μ΄κ²μ μλνκ³ μ¬λ¬λΆμκ² κ·Έκ²μ΄ μ΄λ»κ² λνλλμ§ μλ €μ€ κ²μ λλ€.
μ΄κ²μ μ μλνμ΅λλ€. νμ¬ μ°λ¦¬κ° κ²ͺκ³ μλ κ°μ₯ ν° λ¬Έμ λ λͺ½κ³ μ΄λμ κ΄ν κ²μ λλ€. λμμ μ£Όμ μ κ°μ¬ν©λλ€.
λͺ¨λ νλͺ©μ ν λ²μ μ μ₯νλ €λ©΄ μ΄λ»κ² ν΄μΌ ν©λκΉ? νλͺ©μ΄ λ³κ²½λ λλ§λ€ μμ²νκ³ μΆμ§ μμ§λ§ μ¬μ©μμ μμ μ λν λ¨μΌ μμ²μΌλ‘ λͺ¨λ μ μ₯νκ³ μΆμ΅λλ€. λ¬Έμκ° μ μ₯λ λ λͺ¨λ κ²μ μμ§νκ³ λ¬Έμμ 'νλͺ©' μμ±μ μ λ°μ΄νΈνλ κ²μ λν΄ μκ°νκ³ μμμ΅λλ€. μ’μ ν΄κ²°μ± μ λκΉ?
νλͺ©μ΄ λ¬Έμμ μ€μ λμ΄ μλ ν document.save()λ₯Ό μννλ©΄ νλͺ©λ μλ²λ‘ μ μ‘λ©λλ€.
κ·Έλ¬λ λ°νμμ document1.items 컬λ μ μ νλͺ©μ μΆκ°νλ©΄ document1μ 'items' μμ±μλ μλμΌλ‘ μΆκ°λμ§ μλλ€κ³ κ°μ ν΄ λ³΄κ² μ΅λλ€. λ°λΌμ document1.save()λ₯Ό μννλ©΄ 컬λ μ μ μΆκ°ν μ λͺ¨λΈμ΄ μλ²λ‘ μ μ‘λμ§ μμ΅λλ€. 컬λ μ μ λν λ³κ²½ μ¬νμ΄ μ μ₯κ³Ό ν¨κ» μ μ‘λ λͺ¨λΈμ μμ±μμ μ΄λ»κ² μ νλ μ μλμ§ μ μ μμ΅λλ€.
λ°λΌμ μ΄λ₯Ό μ²λ¦¬νλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€. λ¬Έμμλ κΈ°λ³Έ νλͺ© λ°°μ΄μ΄ μμ΅λλ€. μ΄κΈ°ν μ μ€λ²λ‘λλ μ§ν© λ©μλμμ μμ±μμ μ νλͺ© 컬λ μ μ λ§λ€κ³ λ¬Έμμ μ€μ ν©λλ€.
class Document extends Backbone.Model
defaults:
items: []
set: (attrs, options) ->
items = attrs['items']
if _( items ).isArray()
if _( items ).isEmpty()
attrs['items'] = new DocumentItemsCollection
newItem = new Item
attrs['items'].add(newItem, { silent: true })
else
attrs['items'] = new DocumentItemsCollection items
κ·Έ μμ μμ 'get', 'set', 'add' λ° 'remove'λ₯Ό μ¬μ©νμ¬ νλͺ© μμ§ λ°©λ²μ μ²λ¦¬νλ©΄ λ©λλ€. μ νκΈ°λ²μ νΌλνμ§ λ§μμμ€. λ¬Έμ μ체μμ λ³κ²½ μ΄λ²€νΈλ₯Ό λ°μμν€λ addItem λ° deleteItemμ΄λΌλ λ©μλκ° λ΄ Document ν΄λμ€μ μμ΅λλ€. λ¬Έμμμ save()λ₯Ό μννλ©΄ νλͺ© 컬λ μ μμ toJSONμ νΈμΆν©λλ€.
μμ§ν μ΄κ²μ μ°λ¦¬ λ¬Έμμ λ¨μν κ²½μ°μ΄λ©° λ κΉμ νμ λ¬Έμκ° μμ΅λλ€. λ°±λ³ΈμΌλ‘ μ΄ μ λμ 볡μ‘μ±μ μ²λ¦¬νκ³ λͺ¨λΈμ μ¬λ¬ λ©μλλ₯Ό μ€λ²λ‘λνλ κ²μ μ λ§ κ³¨μΉ μν μΌμ λλ€. μ°λ¦¬λ μ΄μ λ°±λ³Έμ λ―Έλμ μμΉ μ½μ΄λ‘ κ΅μ²΄νλ κ²μ κ³ λ €νκ³ μμ΅λλ€.
μ λ§ λ³΅μ‘ν λ¬Έμλ₯Ό μ²λ¦¬ν΄μΌ νλ κ²½μ° ExtJS λλ μμΉ μ½μ΄λ₯Ό μ΄ν΄λ³΄λ κ²μ΄ μ’μ΅λλ€. λ°±λ³Έμ κ°λ¨ν λͺ¨λΈμ΄ μλ μκ·λͺ¨ νλ‘μ νΈμ μ ν©νμ§λ§ κ°μ²΄/μνΈμμ©μ΄ μ¦κ°νκΈ° μμνλ©΄ κ½€ 빨리 λΆν΄λ©λλ€.
1.0μ λν μλ‘μ΄ "λͺ¨λ² μ¬λ‘"κ° μμ΅λκΉ?
@eranation : items
λ₯Ό μ μ§νλ κ²μ μ’μνλ―λ‘ λκΈ°νλ₯Ό μ μ§ν νμκ° μμ΅λλ€. μ΄λ₯Ό μν΄μλ ꡬ문 λΆμμ μν΄ μλ΅μμ items
κ°μ²΄λ₯Ό κ°μ Έμ μ§λ ¬νλ₯Ό μν΄ λ€μ μΆκ°ν΄μΌ ν©λλ€(μλ μ°Έμ‘°). κ·Έ μΈμλ @rsim μ΄ constructor
λ©μλμ initialize
μ λ£μ λ
Όλ¦¬λ₯Ό λμ λ£κ³ on
λμ bind
(λ°μ―€ μ§μ μ€λ¨λ¨).
κ°λ₯ν κ²½μ° μμ±μ μμ ν΄μ(μ€μ²©λ 컬λ μ , λͺ¨λΈ λ± μμ)λ‘ λ§λλ κ²μ΄ ν¨μ¬ μ½λ€λ κ²μ μμμ΅λλ€.
var Document = Backbone.Model.extend({
constructor: function() {
this.items = new ItemSet(null, {document: this});
this.items.on('change', this.save, this);
Backbone.Model.apply(this, arguments);
},
parse: function(resp) {
this.items.set(resp.items, {parse: true, remove: false});
delete resp.items;
return resp;
},
toJSON: function() {
var attrs = _.clone(this.attributes);
attrs.items = this.items.toJSON();
return attrs;
}
});
var ItemSet = Backbone.Collection.extend({
model: Item,
initialize: function(models, options) {
this.document = options.document;
}
});
var Item = Backbone.Model.extend({
// access document with this.collection.document
});
var document1 = new Document({
name: "Test",
version: 1,
items: [
{name : "Item 1", position : 0},
{name : "Item 2", position : 1}
]
});
μ΄κ²μ κΉμ΄ μ€μ²©λ μ€ν€λ§μμλ μ μλνλ κ² κ°μ΅λλ€. ( λ¬Έμ μ°Έμ‘°)
@akre54 κ°μ¬ν©λλ€, μ΄κ²μ μ’μ μμ λλ€. λλ¨ν κ°μ¬ν©λλ€.
κ°μ₯ μ μ©ν λκΈ
@eranation :
items
λ₯Ό μ μ§νλ κ²μ μ’μνλ―λ‘ λκΈ°νλ₯Ό μ μ§ν νμκ° μμ΅λλ€. μ΄λ₯Ό μν΄μλ ꡬ문 λΆμμ μν΄ μλ΅μμitems
κ°μ²΄λ₯Ό κ°μ Έμ μ§λ ¬νλ₯Ό μν΄ λ€μ μΆκ°ν΄μΌ ν©λλ€(μλ μ°Έμ‘°). κ·Έ μΈμλ @rsim μ΄constructor
λ©μλμinitialize
μ λ£μ λ Όλ¦¬λ₯Ό λμ λ£κ³on
λμbind
(λ°μ―€ μ§μ μ€λ¨λ¨).κ°λ₯ν κ²½μ° μμ±μ μμ ν΄μ(μ€μ²©λ 컬λ μ , λͺ¨λΈ λ± μμ)λ‘ λ§λλ κ²μ΄ ν¨μ¬ μ½λ€λ κ²μ μμμ΅λλ€.
μ΄κ²μ κΉμ΄ μ€μ²©λ μ€ν€λ§μμλ μ μλνλ κ² κ°μ΅λλ€. ( λ¬Έμ μ°Έμ‘°)