Breezejs [Q] Необработанные причины отказа (должно быть пустым)
В эти дни я выучил breezejs,durandaljs, поэтому я подал заявку на спа-упражнения для прохождения упражнений, но breezejs(или q.js) часто выдает ошибки
[Q] Необработанные причины отклонения (должны быть пустыми): ["proto.saveChanges@http:... s / jquery-1.9.1.js: 2750 \ n"] (Firefox)
[Q] Необработанные причины отклонения (должны быть пустыми):(нет стека) Ошибка: обнаружены ошибки проверки на стороне клиента - для получения более подробной информации см. Коллекцию 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 = {Customers: ko.observableArray(), активировать: function () { var self = this; вернуть datacontext.getCustomers(self.customers)); }, deleteCustomer: deleteCustomer }; return vm; // удалить функцию клиента deleteCustomer(customer) { vm.customers.remove(customer); // Устанавливает в EntityState значение "Deleted" customer.entityAspect.setDeleted(); datacontext.saveChanges(); } });
Я думаю, что мой код будет работать нормально, но не может!
Где фатальная ошибка, которую я делаю? Пожалуйста, дайте мне знать.
Заранее спасибо!
1 ответ
Я знаю, что эта тема была здесь больше года, но я подумала, что могу поделиться своей историей.
Я только что получил ту же ошибку при использовании breeze + angularJS. После некоторого исследования я понял это:
Я передавал нулевые значения в некоторых свойствах полномочий, в то время как эти поля в таблице базы данных помечены как NOT NULL.
Бриз - сохранить изменения
В реализации breeze.saveChanges проверка выполняется по внутреннему флагу (строка 12743 приблизительно: if (this.validationOptions.validateOnSave) ...)
Это делается для того, чтобы включить проверку сущности по схеме базы данных (она же метаданные).
Сейчас большую часть времени мы склонны вызывать saveChanges без каких-либо параметров. И ошибка не показывает иначе, чем в консоли, как общее сообщение об ошибке проверки.
Что я сделал
Мы исправим это было в 2 части:
- Добавьте в мои вызовы код для saveChanges, чтобы перехватить эти ошибки и отобразить лучшее сообщение в консоли (см. Код ниже)
- Исправьте либо схему БД (т. Е. Поля Relax NOT NULL в NULLABLE), либо ИЛИ установите некоторые значения по умолчанию, ИЛИ примените бизнес-логику, добавив необходимые атрибуты в элементы управления вводом.
Вот фрагмент кода, который я сейчас использую, чтобы перехватить ошибки:
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