2013-03-27 17 views
8

Formlar Ember.js'de çalışıyorum ve tüm model özelliklerinin bir listesini almak istiyorum, böylece farklı anlarda formun durumunun anlık görüntüsünü alabilirim . Bir modelin tüm özelliklerinin bir listesini almak için bir yolu var mı?Bir Ember.js modelinin tüm özellikleri nasıl alınır

Örneğin benim modeli ise:

App.User = DS.Model.extend({ 
    name: DS.attr('string'), 
    email: DS.attr('string'), 
    current_password: DS.attr('string'), 
    password: DS.attr('string'), 
    password_confirmation: DS.attr('string'), 
    admin: DS.attr('boolean'), 
} 

Sonra böyle bir şey var istiyorum:

> getEmberProps('User') 

["name", "email", "current_password", "password", "password_confirmation", "admin"] 
+0

JSON.stringify? Bunu denedin mi? – marko

+0

hmmm, bir Ember modeline JSON.stringify nasıl olacağını bilmiyorum. – joscas

cevap

13

Model üzerinde toJSON yöntemini kullanabilir ve anahtarları nesneden alabilirsiniz. ilişkiler için anahtarları döndürmez

Ember.keys(model.toJSON())

Not. Ayrıca bu kullanabilirsiniz

Ember.keys(model.toJSON()).forEach(function(prop) { console.log(prop + " " + model.get(prop)); }) 
+4

'İlişkiler için anahtarlar size geri dönmeyeceğine dikkat edin -> Kullandığınız hangi sürümün olduğunu bilmiyorum; Şu anda Ember 1.11.3 kullanıyorum, o versiyon ilişkileri için anahtarlar da geri döndü. –

0

Hiçbir kolay bir yoldur, ama gibi özel bir mixin deneyebilirsiniz Bu:

Ember.AllKeysMixin = Ember.Mixin.create({ 
    getKeys: function() { 
     var v, ret = []; 
     for (var key in this) { 
      if (this.hasOwnProperty(key)) { 
       v = this[key]; 
       if (v === 'toString') { 
        continue; 
       } // ignore useless items 
       if (Ember.typeOf(v) === 'function') { 
        continue; 
       } 
       ret.push(key); 
      } 
     } 
     return ret 
    } 
}); 

böyle kullanabilirsiniz:

App.YourObject = Ember.Object.extend(Ember.AllKeysMixin, { 
... //your stuff 
}); 
var yourObject = App.YourObject.create({ 
    foo : "fooValue"; 
}); 
var keys = yourObject.getKeys(); // should be ["foo"]; 
+0

Teşekkürler @mavilein Bu çözümden hoşlanmadığım bir mikser kullanmak zorunda kalıyor. Kendimi iş gibi görünen bir şeyle buldum (düzenlememe bakın). Çözümünüz bir karışımdan uzatmak zorunda kalmadan çalışabilir mi? – joscas

+0

Karıştırmada hoşunuza gitmiyorsa, kodu argüman olarak model ile ayrı bir işleve çıkarmak kolay olmalıdır. Ama anlamıyorum, neden karışmayı sevmiyorsun? Bu, muhtemelen bu sorunu çözmek için en yumuşacık yoldur. – mavilein

+0

Evet, belki kafam karışıyor, ancak mixini bu şekilde kullanırsam, nesne örneğinin özellikleridir ama bunu yapamam: 'Kullanıcı = DS.Model.extend (Ember.AllKeysMixin, { isim: DS.attr ('string'), email: DS.attr ('string'), current_password: DS.attr ('string'), şifre: DS.attr ('string'), password_confirmation: DS.attr ('string'), admin: DS.attr ('boolean'), 've sonra 'model', 'e-posta' vb. almak için başka bir yere 'model.getKeys()' .. – joscas

İlgili konular