0

Breezeを使用してASP.NetWebAPIエンドポイントをクエリしようとしていますが、クエリが失敗します。データオブジェクトには次のものが含まれています。

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も記録されます。

それで、クライアント側のオブジェクトへの応答のマッピングに何らかの問題があると思いますか?

Breezeバージョン0.85.2のNuGetパッケージを使用しています

サンプルのToDoプロジェクトを同じ環境で正常に実行することができます

私のプロジェクトでは、さまざまなアセンブリと名前空間のドメインオブジェクト、コンテキストなどをすべて使用していますが、このバージョンでサポートされていることを理解しましたか?

また、プロパティの1つは列挙型です。メタデータではこれは次のように定義されます{\"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プロパティは、実行中のコードでは定義されていません-それを実現するためのbreezeの構成には何が欠けていますか?

アップデート2-解決しましたが、その理由

さて、これは機能しました-ノックアウトへの参照がありませんでした(使用する予定でしたが、それほど遠くはありませんでした)-ノックアウトについて言及していないそよ風の前提条件に少し誤解されました。ノックアウトなしでこれをどのように機能させることができたかを説明し、それがバグである場合、ポイントはあなたのものです

4

4 に答える 4

1

同じエラーが発生し、knockout.jsを参照すると役立ちました(アプリにangularjsを使用しています)

  manager.executeQuery(query).then(function(data) {
        console.log(data);
    });

だが。データマッパーはデフォルトでノックアウトで動作するようです。そのため、観測量のあるKOモデルとしてXHRの結果が得られます。

そこで、breeze.config.initializeAdapterInstance( "modelLibrary"、 "backingStore"、true);を追加しました。

そして今、私はdata.resultsを観察可能なコレクションとして受け取りません。

私の答えがお役に立てば幸いです。

于 2013-02-02T14:07:48.367 に答える
0

応答のMessageプロパティが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");
});

お役に立てば幸いです。

于 2013-01-23T14:39:43.357 に答える
0

このエラーは、エンティティタイプコンストラクターの1つに関係しているようです。コードのどこかで「registerEntityTypeCtor」メソッドを呼び出していると思います。もしそうなら、私はあなたがそこに登録しているコンストラクターにブレークポイントを置きます。

他のコメントによると、.NET列挙型はbreezeクライアントで整数に変換されることになっています。これは、それらをサポートできる唯一の「プリミティブ」データ型です。'EntityManager.saveChanges'を呼び出すと、サーバー上の列挙型に変換されます。

Breezeには「ノックアウト」は必要ありません。「angularjs」または「backbone」のいずれかを使用することもできます。別のライブラリを指定しない場合は、breezeクライアントをデフォルトでノックアウトします。ここで「breeze.config.initializeAdapterInstance」トピックを参照してください。これを文書化するためのより良い仕事が必要です。

于 2013-01-23T17:45:44.373 に答える
0

リチャードに苦労してすみません。私たちはそれから学び、あなたが耐えた痛みを次の人に与えようとします。

FWIW、ノックアウトが前提条件であるとは言いません... KOは前提条件ではないためです。代わりにAngularまたはBackboneを使用できますが、将来的には他の選択肢も予想されます。

Breezeを学んでいるだけのときに、構成オプションに溺れてしまうことはありません。そこで、デフォルトのモデルライブラリとしてKOを選択しました(jQueryがデフォルトのAJAXプロバイダーであり、Web APIがデフォルトの「データサービス」テクノロジーであるのと同じです)。私たちは多くの場所でそう言います。前提条件は、それについて言及するための別の良い場所のように見えます。

たまたま、あなたはとにかくKOを使うつもりだったので、設定は必要ありませんでした。ほとんどの人は、KOを含むMVCテンプレートのようなものから始めて、Index.cshtmlにロードします。

どうやらあなたは白紙の状態から始めたようです(おそらく「ASP空のWebアプリケーション」?)。Breeze Web API NuGetパッケージはスペアを目指しているため、KOは含まれていません。KOを使用したい場合は、(誤って)自分で追加することを考えました...正しいスクリプト順序で... 明らかに、この特定の開発パスを文書化するためのより良い仕事をすることができます...特に私たち自身がとても気に入っているので。それを指摘してくれてありがとう

もう1つの問題は、例外が役に立たなかったことです。あなたの質問に答える他の試みから、Breezeの経験を持つ人々でさえ何が悪いのかを認識できなかったことがわかります。欠落しているスクリプトを少し早く検出して、より適切なメッセージで例外をスローできるかどうかを確認します。

于 2013-01-23T18:57:25.027 に答える