SPAでbreeze.jsを使用していますが、サーバーから読み込まれたエンティティに問題があります。つまり、メタデータから(を使用してmetadataEntityType.createEntity()
)作成され、エンティティマネージャーに追加されたエンティティには、サーバー側モデルなどのすべてのプロパティがあり、ノックアウトでバインドする準備ができています。これはすばらしいことです。
問題は、を使用するentityModel.EntityQuery.from("WorkOrders")
と、promiseに渡すsuccessCallbackが.then
、値== nullのすべてのプロパティが欠落しているバニラjsオブジェクトの配列を含むresultsプロパティを持つデータオブジェクトを取得することです(これはまさにサーバーがそれを送信する方法です)データはネットワーク経由ですが、breezeにはクライアント上のすべてのメタデータがあり、それらが存在することを知るためにすべてのプロパティを必要としないため、このように意図されていると思います)。
createEntity()のような本格的なノックアウトオブジェクトを作成できるカスタムコンストラクターがありますが、breezeがこれを自動的に処理できるようにするためのより良い方法があるはずだと思います。これらのオブジェクトはすでに存在しているはずなので、エンティティマネージャーに追加する必要があるかどうかはわかりません。また、を使用して保存するカスタムコンストラクターを登録しましentityManager.metadataStore.registerEntityTypeCtor
たが、成功コールバックの取得内容は変わりません。常に、次のようなプレーンJSONです。サーバーから送信されました。
更新: jsonペイロードを返すためにサーバーで呼び出されるメソッドのコードは
[HttpGet]
public IQueryable<WorkOrder> WorkOrders()
{
return (IQueryable<WorkOrder>)_contextProvider.Context.WorkOrders;
}
@Jayがその回答とコメントで指摘したように、それが行動の原因である可能性があります。返されるJSONペイロードは次のとおりです。
[{"$id":"1","$type":"WorkOrders.Domain.Models.WorkOrder, WorkOrders.Domain","Approved":false,"DateModified":"2013-01-02T22:31:20.897","RequestForEstimate":false,"Id":5}]