BreezeJS усекает значения сопоставленных свойств

#angularjs #breeze

#angularjs #breeze

Вопрос:

Я использовал BreezeJS v 1.4.11 в проекте, и все работало нормально. Затем я обновил его до версии v1.4.13, и теперь у меня проблема с несопоставленными свойствами. Я знаю, что не должен был связываться с чем-то, что работало!

У меня есть пара десятичных свойств, доступных только для чтения, в моих классах EF. Они вычисляются на стороне сервера и корректно возвращаются по проводам. Я проверил это в Fiddler и в инструментах разработчика в Chrome.

Значения свойств передаются обратно клиенту в результате JSON, но не отображаются как определенные свойства в метаданных с сервера. Это понятно, и поэтому на стороне клиента у меня есть model.js где я расширяю метаданные, как описано в курсе Джона Папаса Angular (который, кстати, очень хорош) по Pluralsight. Я добавляю свойства (с соответствующими именами) и устанавливаю начальное значение равным 0.0. Затем Breeze должен «сопоставить» входящее значение с этими новыми свойствами, что он и делает.

     function registerPaymentEntity(metadataStore) {
        metadataStore.registerEntityTypeCtor('Payment', Payment);

        function Payment() {
            this.TotalPayment = 0.0;
            this.StandardPayment = 0.0;

            // other stuff...
        }
    }
 

Однако … в 1.4.11 все было в порядке, но в 1.4.13, похоже, усекается десятичное значение и теряются все десятичные разряды. Если я отправлю обратно, например, 2500.36, он будет отображаться нормально в 1.4.11, но будет отображаться как 2500.00 в 1.4.13.

Сначала я подумал, что это я применяю какую-то странную фильтрацию к ячейкам ngGrid, но, покопавшись в инструментах разработчика, оказалось, что хранилище резервных копий Breeze содержит усеченное значение, а не полное значение.

Я не смог проверить 1.4.12, так как не могу найти, где его скачать, не собирая его из исходного кода, что требует небольшой работы (каламбур), с которой я на данный момент не знаком. Я просмотрел исходный код, но между .11 и .13 есть много изменений, и я пока ничего не смог точно определить.

Это может быть сообщение об ошибке, а не «истинный» вопрос SO, но, с другой стороны, я могу делать что-то не так, поэтому прошу немного разъяснений.

Итак, вопрос в том, испытывает ли кто-нибудь еще подобную проблему или ваши десятичные свойства только для чтения в порядке. Если да, можете ли вы пролить свет на то, что я должен делать.

Ответ №1:

Это была ошибка, и теперь она исправлена в Breeze.js Репозиторий GitHub. Это исправление также будет частью следующего полного Breeze.js релиз (1.4.14) выйдет где-то на следующей неделе.

Одно дополнительное замечание здесь: также была исправлена другая ошибка, которая может привести к нарушению вашего кода. Ранее соглашение MetadataStore.naming НЕ использовалось для преобразования между именами клиента и сервера, когда были задействованы «не сопоставленные» свойства; начиная с (1.4.14) соглашение Naming используется для преобразования не сопоставленных имен свойств (а также сопоставленных имен реквизитов).