0
我發現了一個關於ComplexType屬性的錯誤。我有一個Object,它有一個屬性,它是我在客戶端元數據中定義爲Complex屬性的其他對象的集合,即「isComplexType:true」。但是,複雜類型的所有屬性都設置爲「未定義」。我做了一些調試,發現:ComplexType屬性陣列錯誤
// target and source may not be entities that can also be complexTypes.
function updatePropertyFromRawEntity(dp, target, rawSource) {
var val = getPropertyFromRawEntity(rawSource, dp);
if (val === undefined) return;
if (dp.isComplexProperty) {
var coVal = target.getProperty(dp.name);
dp.dataType.dataProperties.forEach(function (cdp) {
// recursive call
updatePropertyFromRawEntity(cdp, coVal, val);
});
} else {
target.setProperty(dp.name, val);
}
}
rawSource參數是一個數組(在complexTypes的情況下)是一個對象數組。所以,問題是調用getPropertyFromRawEntity()時,它通過陣列而不是一個對象:
function getPropertyFromRawEntity(rawEntity, dp) {
var propName = dp.nameOnServer || dp.isUnmapped && dp.name;
return parseValueForDp(rawEntity[propName], dp);
}
所以rawEntity [PROPNAME]總是未定義,因爲它的陣列。
我明白你在說什麼,但並非如此。未定義的屬性不會是可觀察的,我需要它。我也知道ComplexType具有明確的結構。我很確定代碼中存在漏洞。快速解決方法是檢查rawSource是否爲數組並執行foreach循環。但是你可能比我更清楚Breeze裏發生了什麼。側面的問題:有沒有辦法將整個對象樹發回saveChanges服務器? – 2013-05-13 18:50:47
現在ComplexTypes的實例必須是標量,即它們不能是數組。我們將在即將發佈的版本中放寬這一限制,我們將提供對NoSQL數據庫的支持。這個代碼是非常平凡的。至於將整個樹發送回服務器,saveChanges方法允許您列出要保存的對象。 (默認僅發送添加/修改或刪除的實體)。所以你需要走你的對象圖,(並不難,因爲你有entityMetadata可用),並收集你想保存的實體列表。 – 2013-05-14 02:12:19
您是否有估計何時發佈下一個版本? – 2013-05-14 06:56:18