使用 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);
}