2013-01-23 28 views
0

我试图使用微风来查询ASP.Net的Web API端点和查询失败 - 包含数据对象:Breezejs如何调试类型错误的原因在查询响应

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

所以我猜测有一些这种问题将响应映射到客户端的对象?

我使用的NuGet包微风版本0.85.2

我可以得到样品待办事项项目在同一环境

我的项目不使用域对象,环境等都是从运行正常不同的程序集和命名空间,但我明白这个版本支持?

另外的属性中的一个是一个枚举 - 元数据中的这被定义为{\"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属性在我的运行代码中是未定义的 - 我在微风配置上丢失了什么?

更新2 - 已解决但为什么

好了,所以我得到了这个工作 - 我缺少一个参考淘汰赛(我正打算使用,但还没有得到那么远) - 我是一个小被微风的先决条件所误导,因为如果任何人都可以解释我可以如何在没有淘汰赛的情况下得到这个工作,并且如果它的错误那么积分就是你的

回答

0

对不起,你挣扎着理查德。我们会尝试从中吸取教训,并让下一个人承受你所承受的痛苦。

FWIW,我们不是说Knockout是先决条件......因为KO不是先决条件。您可以使用Angular或Backbone,我们预计未来还有其他替代方案。

当您刚刚学习Breeze时,我们不想在配置选项中淹死您。所以我们选择KO作为默认的模型库(就像jQuery是默认的AJAX提供者,Web API是默认的“dataservice”技术一样)。我们在很多地方都这样说;先决条件似乎是另一个提及它的好地方。

碰巧,你打算和KO一起去,所以不需要配置。大多数人开始使用包含KO的MVC模板,并在Index.cshtml中加载它。

显然你从一个干净的石板(“ASP空Web应用程序”也许?)开始。 Breeze Web API NuGet包努力保留备用,因此不包含KO。我们认为(不正确)你会自己添加它......按照正确的脚本顺序......如果你想使用KO。显然,我们可以更好地记录这一特定的发展道路......特别是我们非常喜欢它。 谢谢指出

另一个问题是异常没有帮助。你可以从其他尝试回答你的问题,即使有Breeze经验的人也不能识别出什么是错的。我们会查看是否可以早一点检测到丢失的脚本,并用更好的消息抛出异常。

+0

是的我已经使用空的web应用程序模板,并添加库当我开始使用它们时 - 现在我已经对Breeze留下了深刻的印象! – Richard

0

每当我收到错误消息响应的属性是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"); 
}); 

我希望我帮助你。

+0

感谢朱利安,但我已经剥离了我的“然后”功能,以简单的警报,并返回true - 警报是第一行,并从来没有叫 – Richard

0

这个错误看起来像它与你的一个实体类型构造函数有关。我猜你正在代码中的某个地方调用'registerEntityTypeCtor'方法。如果是这样,那么我会在你正在注册的构造函数中放置一个断点。

根据您的其他评论,.NET枚举应该在breeze客户端上转换为整数。这是唯一可以支持它们的“原始”数据类型。当您调用“EntityManager”时,它们将转换回服务器上的枚举。saveChanges'

Breeze不需要'敲除',你可以使用'angularjs'或'backbone'。如果您不指定其他库,我们只需将breeze客户端默认为淘汰赛。请参阅'breeze.config.initializeAdapterInstance'主题here。我们需要更好地记录这一点。

1

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

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

不过。 看来,这个数据映射器默认使用knockout,因此我们将XHR结果作为K.O.模型与观察。

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

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

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

相关问题