Breezejs如何在查询响应中调试TypeError的原因

时间:2013-01-23 13:32:25

标签: asp.net-web-api runtime-error breeze

我正在尝试使用Breeze查询ASP.Net Web API端点并且查询失败 - 数据对象包含:

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"

数据对象有一个消息(和responsetext)属性,其中包含来自查询的完整json响应,该响应看起来正常,并且生成的元数据与响应匹配 - 它还记录响应的状态200

所以我猜测将响应映射到客户端的对象会有什么问题吗?

我正在使用Breeze版本0.85.2的NuGet包

我可以让示例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;
};

v_modelLibraryDef上的defaultInstance属性在我正在运行的代码中是未定义的 - 我在breeze的配置中缺少什么呢?

更新2 - 已解决,但为何

好的,所以我得到了这个工作 - 我错过了对淘汰的提及(我计划使用但没有那么远) - 我有点被微风的先决条件误导,没有提到淘汰赛所以如果有人能够解释我怎么能在没有淘汰赛的情况下让它工作,如果它是一个错误,那么积分是你的

2 个答案:

答案 0 :(得分:1)

得到同样的错误,引用knockout.js帮助(我正在为我的应用程序使用angularjs)

  manager.executeQuery(query).then(function(data) {
        console.log(data);
    });

但是。 看来,数据映射器默认使用knockout,因此我们将XHR结果表示为K.O.具有可观察性的模型。

所以我添加了breeze.config.initializeAdapterInstance(“modelLibrary”,“backingStore”,true);

现在我没有收到data.results作为可观察的集合。

希望我的回答能有所帮助。

答案 1 :(得分:0)

每当我收到一个错误,其中响应的Message属性是json格式的数据意味着我在获取数据后运行的函数中有一个错误。

示例:

dataservice.getPalanca(routeData.PalancaID)
.then(function (data) {
    self.palanca(data.results[0]);
})
.fail(function (error) {
    console.log(error); /*if I get here and error.Message == correct json almost always means error in .then function*/
    toastr.error("Ha ocurrido un error al obtener los datos");
});

我希望我帮助你。