2013-08-22 1 views
0

Я недавно обновил до последней версии Breezejs (от 1.3.6 до 1.4.1). У меня есть ситуации, когда я выборки объектов с сервера, и я получаю что-то вродеОбъекты слияния новой версии Breezejs функции

{ 
    "$type": "X.Y.Reference, X.Y", 
    "ReferenceTypeId": "BookEdited", 
    "ShouldDisplay": true, 
    "ShortTitle": "Informationsethik 1995", 
    "Title": "Informationsethik", 
    "Year": "1995", 
    "YearResolved": "1995", 
    "CloudProjectSubset": "ReferenceNavigation", 
    "Id": "34e1f0d1-eda7-4926-a13f-e75e43ff66b5", 
    "ProjectId": "syncproject1" 
    }, 

Я хотел бы, чтобы вы заметили свойство «ShouldDisplay» значение ИСТИНА. Позже, в связи с логикой моего приложения, я еще один запрос, и я среди других, один и тот же объект, на этот раз так:

{ 
    "$type": "X.Y.Reference, X.Y", 
    "ReferenceTypeId": "BookEdited", 
    "ShortTitle": "Informationsethik 1995", 
    "Title": "Informationsethik", 
    "Year": "1995", 
    "YearResolved": "1995", 
    "CloudProjectSubset": "ReferenceNavigation", 
    "Id": "34e1f0d1-eda7-4926-a13f-e75e43ff66b5", 
    "ProjectId": "syncproject1" 
    }, 

уведомления я больше не получить свойство «ShouldDisplay», который правильно из-за моей логики. Breezejs объединяет объекты в локальный кеш после каждого запроса. Дело в том, что при использовании версии 1.3.6 после второго запроса у меня все еще есть моя сущность с 'ShouldDisplay', установленная в true (именно это я хочу), потому что второй запрос возвращает тот же объект без этого свойства, что тогда не переписать. Принимая во внимание, что если я использую versio 1.4.1, свойство (даже если оно не сериализовано) все равно перезаписывается и устанавливается в null, что не то, что я хотел бы. Короче говоря, мне кажется, что в версии 1.3.6 только возвращаемые свойства были фактически перезаписаны, а вместо 1.4.1 все свойства были перезаписаны. На Breezejs's website или в Интернете я не нашел информации об этом «слиянии» поведения, только настройке стратегий слияния в отношении ожидающих изменений, и это не то, с чем я сейчас сталкиваюсь. Кто-нибудь знает, так ли работает Breezejs, или мне не хватает какой-либо конфигурации? Спасибо.

+0

Последняя версия бриза - 1.4.9. Это то, что вы используете? –

+0

Да, это так. Я обновил его вчера. До версии 1.3.6 она работала нормально (на самом деле строка кода, на которую я указываю в моем ответе ниже, не имела проверки! == undefined), из 1.4.1 и будущих выпусков у меня была эта проблема, которая казалась мне решить вчера. Все еще не знаю, является ли это особенностью или ошибкой. –

ответ

0

Хорошо, после отладки исходного кода Breeze я понял это. Я отправлю свое решение в случае, если он будет полезен кому-то или, может быть, парням Breeze, если они захотят проверить, является ли это особенностью или ошибкой. я заменил эту линию

return val !== undefined ? val : dp.defaultValue; 

с этой линией

return val; 

внутри методов ctor.getRawValueFromServer и ctor.getRawValueFromClient. Дело в том, что когда объект должен быть объединен, запускается метод с именем updateEntity, который перебирает свойства целевого объекта и проверяет, определены ли они в необработанном сущности, полученном с сервера. Затем метод заменяет свойство на целевом объекте, если значение этого свойства в необработанном объекте не определено «undefined». Проблема заключается в том, что с исходной строкой кода (показано выше), если значение «undefined», возвращается значение по умолчанию для свойства, которое в моем случае было «null», поэтому ВСЕ свойства моего объекта были заменены. Теперь он работает нормально. Я сделал это исправление по последней (на сегодняшний день) версии Breezejs, которая в настоящее время составляет 1.4.9. Надеюсь, это поможет кому-то.

Смежные вопросы