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 части:

  1. Добавьте в мои вызовы код для saveChanges, чтобы перехватить эти ошибки и отобразить лучшее сообщение в консоли (см. Код ниже)
  2. Исправьте либо схему БД (т. Е. Поля 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
Другие вопросы по тегам