2016-01-22 5 views
2

У меня возник вопрос об обнаружении изменения объекта с ветром.Breeze hasChanges() при редактировании возвращаемого объекта до его первоначальных значений

Предположим, у меня есть объект в состоянии Changed, потому что изменилось только одно из его свойств строки (от 'hello' до 'hello2', например).

Если я вернусь к этому первоначальному значению 'hello', я ожидал, что hasChanges() вернется на Unchanged. Но, увы, государство остается Changed.

Является ли это ожидаемым поведением? Если да, то есть ли способ заставить Бриз использовать его хеш-карту originalValues ​​для проверки реальных изменений вместо «грязности»?

ответ

0

Интересный вопрос. Я не думаю, что есть способ заставить бриз рассчитать hasChanges на основе сравнения, но вы могли бы, вероятно, собрать что-то вместе.

В оригинальной карте hash есть только те свойства, которые, как вы думаете, изменили для объекта. Таким образом, вы можете написать небольшую функцию для запуска события entityChanged и выполнить сравнение, установив entityState в немодифицированный, если нет различий.

Что-то вроде:

em.entityChanged.subscribe(function(changeArgs) { 
    var action = changeArgs.entityAction; 
    var entity = changeArgs.entity; 
    var ovs = entity.entityAspect.originalValues 
    if (action == breeze.EntityAction.PropertyChange) { 
     for (var prop in ovs) { 
      if (prop in entity) { 
       // As soon as a non-matching property is discovered, 
       // then 'Modified' is the appropriate state, so exit 
       if (entity[prop] !== ovs[prop]) return; 
      } 
     } 
     // all the properties are the same. mark it unchanged 
     entity.entityAspect.setUnchanged(); 
    } 
}); 

Это у верхней части моей головы. У меня нет среды для тестирования на данный момент, поэтому я не уверен, что буду доверять коду как есть.

Надеюсь, это поможет.

+0

Спасибо, что выполняет эту работу. Однако требуется дополнительная работа для правильной обработки пустых строк и нулевого значения. – Raered

+0

@Raerd, прохладно. Рад, что это помогает. Когда я получу надлежащую настройку среды, я увижу, будут ли обновления иметь смысл. Отчасти это зависит от того, как вы хотите обрабатывать пустые строки и нули (считайте их одинаковыми или разными?). – Beartums

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

  • Нет связанных вопросов^_^