这些天,我学会了breezejs,durandaljs,所以我做了一个spa应用程序,但是breezejs(或q.js)经常会发出错误
[问]未处理的拒绝原因(应为空):[“proto.saveChanges@http:... s / jquery-1.9.1.js:2750 \ n”]( Firefox )
[问]未处理的拒绝原因(应为空):(无堆栈)错误:遇到客户端验证错误 - 请参阅此对象上的entityErrors集合以获取更多详细信息( IE10,但为什么删除实体会触发验证吗)
我对使用breezejs感到失望,我到底在做什么!!!
我只是保存并删除客户,有时会出现上述错误,有时工作正常。(我感到困惑!:'()
这是我的datacontext的一部分
var saveChanges = function () { return manager.saveChanges() .then(saveSuccess) .fail(saveFailure); //.done() does not work either // function saveSuccess() { console.log("Save Success!"); } // function saveFailure(error) { console.log("Save Failure!"); throw error; } };
保存客户:
define(['modules/dataService'], function (datacontext) {
var ctor = function () {
this.entity = ko.observable();
};
ctor.prototype.activate = function () {
//problem code --> [Q] Unhandled rejection reasons (should be empty)
//it will always create empty Customer when activate is called.
//so error occured when i switch in because of creating empty Customer every time.
this.entity(datacontext.createEntity('Customer'));
};
ctor.prototype.saveClick = function () {
if (this.entity().entityAspect.validateEntity())
datacontext.saveChanges();
else
console.log('validation error!');
};
return ctor;
});
删除客户
define(function(require){ var datacontext = require('modules / dataService'); var vm = { 客户:ko.observableArray(), activate:function(){ var self = this; return datacontext.getCustomers(self.customers); }, deleteCustomer:deleteCustomer }; 返回vm; //删除客户 function deleteCustomer(customer){ vm.customers.remove(客户); //将实体设置为EntityState为'Deleted' customer.entityAspect.setDeleted(); datacontext.saveChanges(); } });
我认为我的代码可以正常工作,但它不能!
我犯的致命错误在哪里?请告诉我。
提前致谢!
答案 0 :(得分:1)
我知道这个帖子已经存在了一年多,但我想我可以分享我的故事。
我在使用breeze + angularJS时遇到了同样的错误。经过一番研究,我发现了:
我在某些权限的属性中传递空值,而数据库表中的那些字段标记为NOT NULL。
Breeze - saveChanges
在breeze.saveChanges的实现中,对内部标志进行检查(约12743行:if(this.validationOptions.validateOnSave)...)
这是为了根据数据库模式(也就是元数据)验证实体。
现在大多数时候我们倾向于在没有任何参数的情况下调用saveChanges。并且错误不会在控制台中显示为一般验证错误消息。
我做了什么
我们的解决方案分为两部分:
以下是我现在用来捕获错误的代码片段:
return manager.saveChanges(null, null, null, function (errors) {
console.log('breeze saveChanges returned some errors: ');
errors.entityErrors.forEach(function(e) {
console.log(e.errorMessage, e);
});
}); // return promise