2013-03-27 19 views
8

Sto lavorando con i moduli in Ember.js e voglio recuperare un elenco di tutte le proprietà del modello in modo da poter scattare istantanee dello stato del modulo in momenti diversi . C'è un modo per ottenere un elenco di tutte le proprietà di un modello?Come recuperare tutte le proprietà di un modello Ember.js

Per esempio, se il mio modello è:

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'), 
} 

Poi vorrei avere qualcosa di simile:

> getEmberProps('User') 

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

JSON.stringify? Hai provato? – marko

+0

hmmm, non saprei come JSON.stringify quello a un modello di Ember – joscas

risposta

13

È possibile utilizzare semplicemente il metodo toJSON sul modello e ottenere le chiavi dall'oggetto.

Ember.keys(model.toJSON())

Notare che non si tornerà chiavi per le relazioni.

+4

'Nota che non restituirai le chiavi per le relazioni' -> Non so quale versione di ambra stai usando; Sto usando Ember 1.11.3 al momento, anche per quella versione vengono restituite le chiavi. –

0

Non v'è alcun modo semplice, ma si potrebbe provare un mixin personalizzato come questo:

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 
    } 
}); 

è possibile utilizzarlo in questo modo:

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

Grazie a @mavilein Quello che non mi piace di questa soluzione è dover utilizzare un mixin. Mi sono inventato qualcosa che sembra funzionare (vedi la mia modifica). La tua soluzione potrebbe funzionare senza dover passare da un mixin? – joscas

+0

Se non ti piace nel mixin, dovrebbe essere facile estrarre il codice in una funzione separata con il modello come argomento. Ma non capisco, perché non ti piace il mixin. Questo è probabilmente il modo più sconvolgente per risolvere questo problema. – mavilein

+0

Beh, forse mi sto confondendo, ma se uso il mixin in questo modo, quello che ottengo sono le proprietà dell'istanza dell'oggetto ma non posso farlo: 'User = DS.Model.extend (Ember.AllKeysMixin, { nome: DS.attr ('stringa'), email: DS.attr ('stringa'), current_password: DS.attr ('string'), password: DS.attr ('stringa'), password_confirmation: DS.attr ('string'), admin: DS.attr ('boolean'), 'e poi' model.getKeys() 'da qualche altra parte per ottenere 'nome', 'email', ecc. – joscas

4

Un modo semplice per stampare i campi ed i loro valori:

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