0

ComplexType プロパティに関するバグを発見しました。クライアント側のメタデータで複合プロパティ、つまり「isComplexType: true」として定義した他のオブジェクトのコレクションであるプロパティを持つオブジェクトがあります。ただし、複合型のすべてのプロパティは「未定義」に設定されます。少しデバッグを行ったところ、次のことがわかりました。

// 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] は配列であるため、常に未定義になります。

4

1 に答える 1

0

Breeze ComplexType には、メタデータによって指定された明確に定義された構造があります。キーを除くすべてのプロパティは、そのデータ型を complexType にすることができます。ただし、あなたが望むのは、「型指定されていない」構造だと思います。これは、次のような「未定義」のデータ型を持つようにプロパティを定義することで実現できます。

  var newProp = new DataProperty({
                name: "Foo"
                dataType: DataType.Undefined,
                isNullable: true,
                isUnmapped: true
            });
  entityType.addProperty(newProp);

「未定義」の dataType は、任意の型と構造のデータを受け入れます。

于 2013-05-13T17:46:10.823 に答える