Я пытаюсь использовать Breeze для запроса конечной точки веб-API ASP.Net, и запрос завершается ошибкой - с объектом данных, содержащим:
internalError: TypeError
arguments: Array[2]
0: "createCtor"
1: null
length: 2
__proto__: Array[0]
get message: function () { [native code] }
get stack: function () { [native code] }
set message: function () { [native code] }
set stack: function () { [native code] }
type: "non_object_property_load"
Объект данных имеет свойство сообщения (и ответа), которое содержит полный ответ json на запрос, который выглядит нормально, и сгенерированные метаданные соответствуют ответу - он также записывает статус 200 для ответа.
Итак, я предполагаю, что есть какая-то проблема с отображением ответа на объект на стороне клиента?
Я использую пакет NuGet для версии Breeze 0.85.2.
Я могу заставить образец проекта ToDo нормально работать в той же среде.
В моем проекте используются объекты домена, контексты и т. д. из разных сборок и пространств имен, но я так понял, что это поддерживается в этой версии?
Кроме того, одно из свойств является перечислением - в метаданных оно определяется как {\"name\":\"State\",\"type\":\"Edm.Self.State\",\"nullable\":\"false\"}]
, но в ответе оно передается как целое число.
Ищу советы о том, как отлаживать это дальше на стороне клиента
Обновить
сравнивая рабочий образец с моим кодом, похоже, что ошибка исходит от этой функции:
/**
Returns the constructor for this EntityType.
@method getEntityCtor
@return {Function} The constructor for this EntityType.
**/
ctor.prototype.getEntityCtor = function () {
if (this._ctor) return this._ctor;
var typeRegistry = this.metadataStore._typeRegistry;
var aCtor = typeRegistry[this.name] || typeRegistry[this.shortName];
if (!aCtor) {
var createCtor = v_modelLibraryDef.defaultInstance.createCtor;
if (createCtor) {
aCtor = createCtor(this);
} else {
aCtor = function() {
};
}
}
this._setCtor(aCtor);
return aCtor;
};
Свойство defaultInstance в v_modelLibraryDef не определено в моем рабочем коде — что мне не хватает в конфигурации бриза, чтобы это произошло?
Обновление 2 — решено, но почему
Итак, у меня это заработало - мне не хватало ссылки на нокаут (которую я планировал использовать, но не зашел так далеко) - я был немного введен в заблуждение предварительными условиями бриза, которые не упоминают нокаут, поэтому, если кто-то может объясните, как я мог заставить это работать без нокаута, и если это ошибка, то баллы ваши