2013-09-25 100 views
1

我正在從服務器接收一些我想要轉換爲複雜類型數組的複雜類型。沒有從服務器返回的foreignKey將complexType映射回父實體,並且由於可以返回的大量數據,我不想創建jsonResultsAdapter來映射屬性,因爲它會添加額外的處理時間。將複雜的數組類型添加到Breeze.js模型

我可能無法正確這樣做,但我加入的complexType這樣 -

metadataStore.addEntityType({ 
    shortName: "Parent", 
    namespace: "MyNameSpace", 
    dataProperties: { 
     id: { dataType: "Int64", isPartOfKey: true }, 
     name: { dataType: "String" }, 
     complexChildren: { complexTypeName: "ComplexChild:#MyNameSpace", isScalar: false } 
    } 
}); 

metadataStore.addEntityType({ 
    shortName: "ComplexChild", 
    namespace: "MyNameSpace", 
    isComplexType: true, 
    dataProperties: { 
     notAForeignKeyId: { dataType: "Int64" }, 
     name: { dataType: "String" } 
    } 
}); 

這個偉大的工程,我可以看到在對象圖中的對象,我發現一切映射,當他們從服務器返回,但是當我試圖把它當作一個簡單的observableArray它拋出的錯誤 -

ko.utils.arrayForEach(parents(), function (parent) { 
    ko.utils.arrayForEach(parent.complexChildren(), function (child) { 
     if (child === aComplexIdiot) { } 
    }); 
}); 

上knockout2.3.0.debug.js線101拋出一個錯誤。我不認爲這是一個微風的問題,因爲一切都正確處理,所以我認爲這是我如何繪製複雜類型,它只是沒有一點意義爲什麼它發生,我不除非必須開始創建工作環境。

回答

0

這裏的短期修復是將數組視爲一個簡單的JavaScript數組而不是Knockout可觀察數組。因此,在地方 -

ko.utils.arrayForEach(parents(), function (parent) { 
    ko.utils.arrayForEach(parent.complexChildren(), function (child) { 
     if (child === aComplexIdiot) { } 
    }); 
}); 

我使用

ko.utils.arrayForEach(parents(), function (parent) { 
    $.each(parent.complexChildren, function (index, item) { 
     if (item === aComplexIdiot) { } 
    }); 
}); 

,直到問題得到解決

0

只是爲了澄清,它聽起來像你能夠返回一個複雜對象的數組,但Breeze不會自動將集合包裝在可觀察數組中。它是否正確?

如果是這樣,它可能是一個微風蟲。直到我們解決它的簡單解決方法是自己將返回的複雜對象集合包裝起來。這有問題嗎?

此外,它將有助於瞭解組成複雜對象數組的各個複雜對象的屬性是否自身被封裝爲敲除對象。

+0

是的,我認爲是這樣的話,就是我在這期間又是用$做。並將其視爲一組常規JavaScript對象並訪問其可觀察屬性。是的,物業正在正確包裝。我將嘗試獲取對象結構的屏幕截圖並將其發佈到此處。 –

+0

謝謝,我會盡量在下週看到這個問題,並試圖重現這個問題,但我們現在有點隱藏了一些其他功能,所以任何修補程序可能不會發佈下一個版本,但我們會嘗試獲取它進入後一個。 –