0

私はホットタオルテンプレートを使用しており、そよ風を使用してその機能を拡張しています。以下に示すように、breeze.partial-entities.js ファイルを使用して、breeze エンティティをノックアウト オブザーバブルで使用できる適切な dtos に変換しました。

function dtoToEntityMapper(dto) {
            var keyValue = dto[keyName];
            var entity = manager.getEntityByKey(entityName, keyValue);
            if (!entity) {
                // We don't have it, so create it as a partial
                extendWith = $.extend({ }, extendWith || defaultExtension);
                extendWith[keyName] = keyValue;
                entity = manager.createEntity(entityName, extendWith);
            }
            mapToEntity(entity, dto);
            entity.entityAspect.setUnchanged();
            return entity;
        }

いくつかのエンティティでは適切に機能し、そよ風のデータをエンティティに変換していますが、エンティティの実装の 1 つでは失敗しています。同じモデルを以下に示します。

public class StandardResourceProperty
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public int StandardResourceId{ get; set; }
    public int InputTypeId{ get; set; }
    public int ListGroupId{ get; set; }
    public string Format{ get; set; }
    public string Calculation{ get; set; }
    public bool Required{ get; set; }
    public int MinSize{ get; set; }
    public int MaxSize{ get; set; }
    public string DefaultValue{ get; set; }
    public string Comment { get; set; }

    public virtual StandardResource AssociatedStandardResource { get; set; }
    public virtual List AssociatedList { get; set; }
}

私が得ているエラーは TypeError: this[propertyName] is not a function [Break On This Error] です

このプロパティ名;

Breeze.debug.js (13157行目)

]

コード付き

proto.setProperty = function(propertyName, value) {
        this[propertyName](value);
        // allow set property chaining.
        return this;
    };

私にお知らせください 。実装で何が問題になる可能性があるのか​​ 、そのような問題をデバッグおよび追跡する方法についてさらに提案を得ることができれば素晴らしいと思います.

4

1 に答える 1

2

バックアップしましょう。「風エンティティをノックアウトオブザーバブルで使用できる適切な dtos に変換する」という意味がわかりません。Breeze エンティティは、KO オブザーバブルとして既に構成されています(デフォルトの Breeze モデル ライブラリ構成を使用していると仮定します)。あなたは何をしようとしているのですか?

getSessionPartialsプロジェクション クエリを実行する Code Camper Jumpstart コースに従っていると思われます。そのクエリ (すべてのプロジェクションと同様) は、エンティティではなく DTO を返し、dtoToEntityMapperメソッドを使用してそれらをエンティティにマップしますSession

CCJSdtoToEntityMapperメソッドはエンティティでは使用できません。これは DTO からエンティティに変換するためのものであり、エンティティではなくDTO を入力として受け取ります。

dtoEntityMapper にさようなら

このメソッドは、プロジェクション クエリにdtoToEntityMapper追加することで、プロジェクションからエンティティへのマッピングを自動化する Breeze の機能よりも前のものです。.toType('StandardResourceProperty')

CCJSgetSessionPartialsクエリは次のようになります。

var query = EntityQuery
    .from('セッション')
    .select('ID, タイトル, コード, SpeakerId, trackId, timeSlotId, roomId, level, tags')
    .orderBy(orderBy.session)
    .toType('セッション');

この方法を使用する場合は、必ずカスタム コンストラクターでisPartialフラグのデフォルト状態を に設定してください ( model.jsを参照) 。true

metadataStore.registerEntityTypeCtor(
    'セッション', function () { this.isPartial = true; }、セッション初期化子);

デフォルトがfalsethis.isPartial = trueであった CCJS の例の逆であることに注意してください。

isPartial(false)完全なエンティティをクエリまたは作成するときは、必ず設定してください。CCJS では、それを行う場所が 2 つありますgetSessionById。ANDの成功コールバックでは、次のcreateSessionようになります。

var createSession = 関数 () {
    return manager.createEntity(entityNames.session, {isPartial: false});
};
于 2013-05-31T19:00:21.833 に答える