Breezeを使用して保存するSaveChanges()
場合、必須フィールドがある場合に単純な更新を行うとエラーが発生します。
例えば
フィールドが不要なName
, およびEmail
フィールドを持つユーザーのテーブルがあります。Email
ユーザー名のリストを表示できます (ただし、電子メールは表示したくありません)。
表示は機能しますが、save が呼び出されません。JavaScript で検証エラーが発生します。
検証エラーのため保存されませんでした: 「メール」が必要です
しかし、確かに、これは私が変更したフィールドで単純な更新を生成するだけであり、電子メールで何もするべきではありません.
奇妙なことに、リストの最初の項目を変更しただけではエラーになりません。
何か案は?
HTML は次のようになります。
<a href="#" data-bind="click: save">Save</a>
<ul data-bind="foreach: modules">
<li >
<form>
<input type="checkbox" data-bind="checked: IsRunning" />
<input type="text" data-bind="value: ModuleName, css: { done: IsRunning }" />
</form>
</li>
</ul>
ビューモデルの保存部分は次のとおりです。
function saveChanges() {
if (manager.hasChanges()) {
manager.saveChanges()
.then(saveSucceeded)
.fail(saveFailed);
} else {
logger.info("Nothing to save");
};
}
function saveSucceeded(saveResult) {
logger.success("# of Modules saved = " + saveResult.entities.length);
logger.log(saveResult);
}
function saveFailed(error) {
var reason = error.message;
var detail = error.detail;
if (reason === "Validation error") {
handleSaveValidationError(error);
return;
}
if (detail && detail.ExceptionType.indexOf('OptimisticConcurrencyException') !== -1) {
// Concurrency error
reason =
"Another user, perhaps the server, may have deleted one or all of the todos.";
manager.rejectChanges(); // DEMO ONLY: discard all pending changes
}
logger.error(error,
"Failed to save changes. " + reason +
" You may have to restart the app.");
};
function handleSaveValidationError(error) {
var message = "Not saved due to validation error";
try { // fish out the first error
var firstErr = error.entitiesWithErrors[0].entityAspect.getValidationErrors()[0];
message += ": " + firstErr.errorMessage;
} catch (e) { /* eat it for now */ }
logger.error(message);
}