ネストされたモデルを含むオブジェクトをそよ風で返しています。標準的なサンプルを取り上げましょう。顧客と注文。サーバーでEF5を使用しています。Breeze を使用して、すべての顧客を取得するためにコントローラーを呼び出しています。また、"Orders" エンティティも含めるために、breeze クエリ呼び出しに ".expand" 属性を含めています。json は完全に戻ってきて、"Derick Bailey" によって構築された "kendo.breeze.datasource" を使用して、風エンティティを [ko.mapping を使用して] ノックアウト オブザーバブルにマップし、最終的に剣道グリッドにバインドしています。これは、ネストされた型を返すまでは完全に機能します。たとえば、「order().Orderid」を要素にバインドしたいとします。そのため、「データ」を剣道データソースに渡してグリッドにバインドしようとすると、「スタック オーバーフロー」例外が発生します。このシナリオは「「注文」を完全に無視すると、バインディングは機能しますが、グリッドの「order().Orderid」にアクセスできません。助けてください?「注文」を完全に無視すると、バインディングは機能しますが、グリッドの「order().Orderid」にアクセスできません。助けてください?
1 に答える
微風データが返されたときに処理する必要があるもの - グリッドに渡す前 - ko.mapping を使用してignore ['entityAspect', 'entityType', and 'orders']
私は非常によく似た問題に遭遇し、Kendo-labs の Derick による「kendo.breeze.datasource」から始めました。もう少し何かを構築するために keno-breeze-knockoutを開始しました...
あなたの後は何をするサンプルの一部:
new kendo.data.extensions.BreezeDataSource({
entityManager: self.datacontext.manager,
endPoint: new breeze.EntityQuery.from('Products').expand('Category'),
defaultSort: "productName asc",
mapping: {
ignore: ['products'] // category.products is recursive - ignore it
}
あなたの後を強調する必要があるソースは次のとおりです。
関数 querySucceeded(xhr) { payload.data = self.mapping.mapToJS(xhr.results);
if (self.inlineCount) {
payload.total = xhr.inlineCount;
}
options.success(payload); // notify the DataSource that the operation is complete
return true;
}
```
function mapToJS(items) {
baseIgnore: ['entityType', 'entityAspect'],
include: [],
ignore: [], // set your particular properties here
mapToJS : function(results) {
var koMapping = {
'include': this.include,
'ignore': this.baseIgnore.concat(this.ignore)
};
// if you override - you might not care about using ko.mapping?
if (!ko.mapping) {
throw new Error('knockout mapping plugin is required!');
}
return ko.mapping.toJS(results,koMapping);
}
}