これに関するいくつかの投稿がありますが、私のプロジェクトで機能する具体的なものは何もありません。
エンティティの拡張に関するBreezeのドキュメントを読みましたが、ノックアウトを使用しており、Angularを使用しています。
サーバーでカスタムプロパティを定義しましたが、JSONで渡されています。
ただし、Breeze jsはメタデータがないため、無視します。
Breezeがプロパティを読み取れるように、クライアントでメタデータを定義する必要があります。
これが私がこれまでにクライアントを持っているものですが、それは機能しません。動作しないということは... {{item.MyProp}}で呼び出すと、画面に何も表示されないということです。ただし、実際のメタデータの他のすべてのプロパティは問題なく表示されます。
configureBreeze();
var serviceName = 'api/Entity';
var manager = new breeze.EntityManager(serviceName);
manager.enableSaveQueuing(true);
var store = manager.metadataStore;
addMyPropType(store);
function addMyPropType(store) {
store.registerEntityTypeCtor("Merchant", MyProp);
}
// custom Merchant constructor
var MyProp= function () {
//'MyProp' is a server-side calculated property of the Merchant class
// This unmapped property will be empty for new entities
// but will be set for existing entities during query materialization
this.MyProp= "test";
};
var dataservice = {
store: store,
List: List,
Create: Create,
ListDetail: ListDetail,
Save: Save
};
return dataservice;
NODBサンプルを用意しましたが、DBがあり、KOも使用しています。
更新:
OK。だから私は部分的に機能するものを見つけました。デフォルト値がビューに表示されるようになりました。ただし、JSONの値は入力されていません。常にデフォルト値が使用されます。
これは私が今持っているものです:
var Merchant = function () {
this.MyProp = "5";
};
store.registerEntityTypeCtor("Merchant", Merchant);
MyPropにJSONの実際の値を入力するには、何が必要ですか?
さて、これはBreezeのバグのようです。実際に動作させるには、breeze.jsファイルを編集する必要があります。バグだとは思ってもみませんでした。
私はここで答えを見つけました:
Breeze拡張エンティティプロパティは2番目のクエリでのみ読み込まれます
更新:
今日、breeze.jsの最新バージョンに更新しましたが、バグはもう存在しません。ですから、これは基本的に理由もなく多くの苦痛でした。助けてくれてありがとう。何らかの理由で更新できない場合は、上記のリンクを使用してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加