シンプルな風/ノックアウト ベースの SPA があります。エンティティのリストに「単一保存」オプションを実装する必要がありました。編集は、別のポップアップではなく、リストで行う必要がありました。
サーバーを保存すると、エンティティの特定の属性のみが更新されたことを確認し、「最終更新日」属性も更新します。
エンティティのリストは、1 つのエンティティ マネージャによってサーバーから取得されました。
単一の保存を有効にするために、更新されて保存の準備が整ったエンティティがメインのエンティティ マネージャからエクスポートされ、一時的なエンティティ マネージャにインポートされました。保存が実行され、(OK の場合) オブジェクトが再エクスポートされ、メイン エンティティ マネージャーにインポートされます。
function saveSingle(entity)
{
var tempMgr = MainEntityManager.createEmptyCopy();
var exp = MainEntityManager.exportEntities([entity]);
tempMgr.importEntities(exp, {
mergeStrategy: breeze.MergeStrategy.PreserveChanges });
tempMgr.saveChanges()
.then(function (saveResult) {
var reImp = tempMgr.exportEntities();
MainEntityManager.importEntities(reImp);
entity.Last_Updated_Date(saveResult.entities[0].Last_Updated_Date());
entity.entityAspect.entityState = breeze.EntityState.Unchanged;
logger.success("changes saved");
})
.fail(function () {
logger.error("Single Save failed: " + error.message);
});
}
ただし、MainEntityManager プロセスへの再エクスポート/インポートで保存した後、新しい「最終更新日」の値がコピーされないようです。私はこれを回避しましたが、この実装で何か間違ったことをしたのか、「単一エンティティの保存」機能を構築するためのより良い方法があるのか どうか疑問に思っていますか?
コメント、質問大歓迎です!