2013-01-23 27 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作爲可觀察集合。

希望我的回答會有所幫助。

相關問題