5

私はデータアクセスにそよ風を使用しているSPAに取り組んでいます。できるだけ早くメタデータのインスタンスを作成したいのですが、これが初期化を完了した後になると思います。

var manager = new entityModel.EntityManager(serviceName);

ただし、エンティティマネージャーはメタデータをロードするためにWeb APIコントローラーに対してajaxリクエストを実行する必要があり、manager.metadataStore.getEntityType("EntityName")完了する前に試行すると、次のようになります。

Uncaught Error: Unable to locate an 'Type' by the name

私の質問は、メタデータがロードされたときにトリガーされるイベントがありますか?ドキュメントをさまよいましたが、見つからないようです。

4

3 に答える 3

5

イベントはありませんが、MetadataStore.fetchMetadataメソッドを自分で呼び出して、promiseの「then」部分でロジックを実行できます。

MetadataStore.fetchMetadataメソッドは、まだ呼び出されていない場合、各サーバーに対する最初のクエリによって内部的に自動的に呼び出されます。。

したがって、最初のクエリの前に、MetadataStore.fetchMetadataを自分で呼び出すだけです。

これが理にかなっていることを願っています。

于 2013-01-03T21:24:03.067 に答える
3

Breeze 1.4.16以降、MetadataStoreにはmetadataFetchedイベントがあり、ここで説明されています:http ://www.breezejs.com/sites/all/apidocs/classes/MetadataStore.html#event_metadataFetched

于 2014-07-14T20:05:27.797 に答える
1

提案されたソリューションの問題は、fetchMetadataがさまざまな理由で失敗する可能性があることです。失敗が一時的な通信障害によるものである場合、次のクエリ呼び出しはメタデータをフェッチし、アプリはWRTメタデータを初期化するために必要なものを初期化せずにデータへのアクセスを開始します(この場合はクライアント側の検証)。私たちの場合、検証がないことを除いて、アプリは正常に動作しているようです。

この状態が頻繁に発生するのは奇妙です。fetchMetadataの呼び出しは失敗しますが、後続のクエリは成功します。毎回発生するわけではありませんが、少なからず発生します。

fetchMetadataが成功するまで他のデータアクセスを防ぐ状態をシステムに追加し、成功するまで再試行することができます。しかし、それは多くの作業です。ロードが完了したときに発生するイベントの方がはるかに優れています。

于 2013-12-09T12:32:05.100 に答える