Как получить все свойства Ember.модель js

Я работаю с формами в Ember.js и я хотим получить список всех свойств модели, чтобы я мог делать снимки состояния формы в разные моменты. Есть ли способ получить список всех свойств модели?

например, если моя модель:

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

затем я хотел бы иметь что-то вроде этого:

> getEmberProps('User')

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

4 ответов


вы можете просто использовать метод toJSON метод на модели и получить ключи от объекта.

Ember.keys(model.toJSON())

обратите внимание, что не вернет вам ключи для отношений.


простой способ распечатать поля и их значения:

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

вы также можете использовать это:
http://emberjs.com/api/data/classes/DS.Model.html#property_attributes http://emberjs.com/api/data/classes/DS.Model.html#method_eachAttribute

Ember.get(App.User, 'attributes').map(function(name) { return name; });
Ember.get(userInstance.constructor, 'attributes').map(function(name) { return name; });

есть также аналогичные свойства для отношений.


нет простого способа, но вы можете попробовать пользовательский миксин, как это:

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

Вы можете использовать его как это:

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