使用Breeze使用SaveChanges進行保存時,如果我有必填字段,則在進行簡單更新時會出錯。微風:驗證保存時出錯
如
我的用戶提供了名稱的表格和電子郵件字段在不需要的電子郵件領域。
我可以顯示用戶名列表(但不希望顯示的電子郵件)
顯示的作品,但保存不會被調用 - 我在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);
}
Mike
感謝您的答覆。對不起 - 我的問題不清楚。電子郵件是數據庫所必需的,但未在應用程序中顯示或使用。我現在明白,驗證正在成爲現實,因此我通過關閉驗證來解決(現在)。但奇怪的是,電子郵件字段確實有價值 - 但它不會顯示給用戶,所以應該導致驗證錯誤 - 應該嗎? – Mike
微風實際上並不知道你在UI中渲染什麼,它只知道模型。如果該屬性在元數據中並且是必需的,那麼默認情況下它將被驗證。這個想法是因爲它在db上並不意味着它是有效的。但是,如果您不需要該屬性,則可以將其從模型中排除。這有意義嗎? –
重讀您的評論,你是否認爲驗證實際上是不正確的,即使它包含數據,它報告了一個必需的驗證錯誤,還是驗證報告了一些其他錯誤? –