Как вы можете получить Object.keys() для чтения свойств сущности ветерка?
Я пытаюсь использовать Breeze с угловым приложением, используя реактивные формы.
FormGroup.patchValue()
Функция принимает мой объект сущности Breeze и должна быть в состоянии исправить его в моей форме.
Тем не мение, patchValue()
использования Object.keys()
перебирать свойства объектов, чтобы знать, какие значения нужно исправить.
Object.keys()
НЕ распознает унаследованные свойства.
Объекты машинописного текста, создаваемые инструментами Breeze, имеют свойства, назначенные с использованием наследования.
Так что ни одно из свойств не видимо для Object.keys(), кроме entityAspect
а также _backingStore
по какой-то причине.
Таким образом, это делает реактивные формы в Angular совершенно бесполезными с легкими объектами.
Есть ли способ избежать использования наследования для присваивания свойств breeze или какой-либо универсальной функции преобразования, которую я могу использовать, чтобы получить Object.keys() для просмотра всех свойств моих объектов-сущностей breeze?
1 ответ
Я не уверен, что это решит это (не знакомо с бризом), но я думаю, что вы могли бы сделать:
function getKeys(obj) {
var myKeys = Object.keys(obj);
var protoKeys = Object.keys(obj.constructor.prototype);
if (Object.getPrototypeOf(obj)) {
protoKeys = protoKeys.concat(getKeys(Object.getPrototypeOf(obj)));
}
return [...new Set(myKeys.concat(protoKeys))].filter(c => c !== 'constructor');
}
Который, используя перенесенный машинописный текст из:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
class CustomGreeter extends Greeter {
howdy() {
return 'howdy';
}
}
let greeter = new Greeter("world");
Даст вам список:
["greeting", "howdy", "greet"]
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var Greeter = /** @class */ (function () {
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function () {
return "Hello, " + this.greeting;
};
return Greeter;
}());
var CustomGreeter = /** @class */ (function (_super) {
__extends(CustomGreeter, _super);
function CustomGreeter() {
return _super !== null && _super.apply(this, arguments) || this;
}
CustomGreeter.prototype.howdy = function () {
return 'howdy';
};
return CustomGreeter;
}(Greeter));
var greeter = new CustomGreeter("world");
function getKeys(obj) {
var myKeys = Object.keys(obj);
var protoKeys = Object.keys(obj.constructor.prototype);
if (Object.getPrototypeOf(obj)) {
protoKeys = protoKeys.concat(getKeys(Object.getPrototypeOf(obj)));
}
return [...new Set(myKeys.concat(protoKeys))].filter(c => c !== 'constructor');
}
console.log(getKeys(greeter))