Я пытаюсь лениво загрузить сложный тип на ветру, но не могу понять, как это сделать.Breeze - Lazy load complex type
Причина, по которой я хотел бы использовать сложный тип, а не путь навигации, является службой, которую я должен потреблять, не делает CRUD так же, как ветер. Мне нужно отправить один объект со всеми его подобъектами (как скалярными, так и нескалярными) на один метод службы, ответственный за хранение данных (insert/update/delete).
Я попытался сделать это с помощью свойств навигации, но это означает, что мне нужно создать массив сущностей для отправки на контроллер API и воссоздать весь объект. Это было бы трудно, но тем более, что в дочерних объектах нет внешних ключей (что имеет место во всех образцах, которые я видел до сих пор), что заставляет их снова отображать их.
Со сложными типами у меня нет этой проблемы (или нет, что я знаю).
я должен потреблять структуру объекта, как это:
1.Parent: продукт (класс)
1.1Child: пакеты (массив)
1.2Child: splitLevels (массив)
1.2.1Grandchild: права доступа (массив)
1.2.1.1Grandgrandchild: аптеки (массив)
1.2.2Grandchild: splitLevel (класс)
Пакеты загружаются вместе с продуктом, это работает отлично. Howevers, splitLevels не включены в этот файл данных (поскольку для этого требуется слишком много данных, и об этом часто не проконсультируются). При запросе этих данных к продукту добавляется логическое значение, чтобы указать, что они были загружены, и с этого момента необходимо отправить их и на сервер.
При загрузке продукта, это приводит к проблеме: Объект не поддерживает свойство или метод «GetProperty»
Это вызвано методом _initializeInstance в ветер:
if (initFn) {
if (typeof initFn === "string") {
initFn = instance[initFn];
}
initFn(instance);
}
this.complexProperties && this.complexProperties.forEach(function (cp) {
var ctInstance = instance.getProperty(cp.name);
cp.dataType._initializeInstance(ctInstance);
});
экземпляра пустым, никакие свойства не могут быть извлечены из него.
Есть ли способ обойти это? Есть ли способ использовать свойства навигации без получения нескольких объектов; так что я могу отправить один объект без использования этого:
if (product.entityAspect.entityState.isUnchanged()) {
product.entityAspect.setModified();
}
// Packages
var entitiesToSave = product.packages().slice();// copy
// Split Levels
if (product.storeSplitLevels) {
product.splitLevelsLoaded(true);
// TODO: Add split levels to entities to save
}
// Product Details
entitiesToSave.push(product);
К сожалению об этом, моих вопросах: 1. Можно ли ленивая нагрузку вложенных сложных типов; являющийся массивом, содержащим сложные типы, которые содержат другие сложные типы. Я не могу заставить это работать (cfr блок кода от бриза). 2. Если нет, существует ли способ использовать свойства навигации без наличия всех объектов на одном уровне, но так же, как их определяемый входной данные. Но вы ответили на этот вопрос своим комментарием. – Reinout