Как получить все свойства 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"];