2015-01-26 3 views
0

У меня есть реализация ветров, где он принимает объект местоположения и отображает свойства в пользовательском интерфейсе. Я перехожу к нескольким свойствам и стараюсь сохранить изменения, но бриз не распознает объект как измененный. Ниже мой код:breeze не распознает измененный объект

[HttpGet] 
    [CustomAuthorize(Claims = "permission:CanViewLocationAttributes")] 
    public Location GetLocationById(int clientId, int locationId) 
    { 
     //returns a single Location object 

    } 

Ниже моя функциональность на стороне клиента, чтобы получить объект и сохранить объект:

function getLocationById(clientId, locationId) { 
     var self = this; 

     return EntityQuery.from('GetLocationById') 
          .withParameters({ clientId: clientId, locationId : locationId }) 
          .using(self.manager) 
          .execute() 
          .then(querySucceeded, this._queryFailed); 

     function querySucceeded(data) { 
      if (data.results.length > 0) { 
       return data.results[0]; 
      } 
      logSuccess(localize.getLocalizedString('_RetrievedLocations_'), locations, true); 
     } 
    } 

     function saveLocationSettings(clientId) { 
     var self = this; 
     var saveOptions = this.manager.saveOptions.using({ resourceName: "SaveLocationSettings", allowConcurrentSaves: true }); 
     var entitiesToSave = self.manager.getChanges(); 
     return self.manager.saveChanges(entitiesToSave, saveOptions).then(saveSucceeded, saveFailed); 
    } 

Моя проблема заключается в том, что здесь значение entitiesToSave является 0, даже после того как я вносить изменения в поля в пользовательском интерфейсе и сохранять их.

После как я связать объект с моей угловой модели:

function getLocationDetails() { 
     clientcontext.location.getLocationById($route.current.params.clientId, $route.current.params.id) 
    .then(function (data) { 
     basicLocationSettings.id = data.locationId; 
     basicLocationSettings.parent = data.fkParentLocationId; 
     basicLocationSettings.locationType = data.locationType; 
     basicLocationSettings.locationName = data.locationName; 
     basicLocationSettings.locationDisplayName = data.locationDisplayName; 
     basicLocationSettings.locationCode = data.locationCode; 
     basicLocationSettings.isActive = data.activeStatus; 
     basicLocationSettings.timeZone = data.fkTimeZoneId; 
     basicLocationSettings.usesAppointments = data.usesAppointments; 
     basicLocationSettings.availabilityWindowDays = data.availabilityWindowDays; 
     basicLocationSettings.appointmentCutOffDays = data.appointmentCutOffDays; 
     basicLocationSettings.dailySummaryEmailTime = data.dailySummaryEmailTime; 
     basicLocationSettings.reminderBeforeApptEmailTime = data.reminderBeforeApptEmailTime; 
     basicLocationSettings.saveLocationSettings = function() { 
      clientcontext.location.saveLocationSettings($route.current.params.clientId); 
     } 
    }); 
    } 

Может кто-нибудь объяснить, что я делаю неправильно? Это моя первая попытка на ветру, и я как бы застрял здесь.

ответ

1

Похоже, что вы копируете значения свойств объекта местоположения объекта потока в переменную объекта pojo с именем «basicLocationSettings». Любые изменения в basicLocationSettings не будут отслеживаться менеджером сущностей бриза или отражены в объекте исходного потока. Вам необходимо привязать фактический объект бриза к вашему пользовательскому интерфейсу, чтобы пользовательский ввод данных напрямую изменял значения свойств объекта.

+0

Но тогда не способ, которым мы можем использовать какую-то ViewModel для UI-связывания ? Мой запрос на бриз выполняется через отдельный репозиторий, и я использую отдельный контроллер для связи с пользовательским интерфейсом, где создается мой объект pojo. В этом дизайне, как я могу привязать ветерок непосредственно к пользовательскому интерфейсу? – devC

+0

Это отдельный вопрос, который нужно задать под тегом angularjs. Я постараюсь помочь, но у меня нет большого опыта с угловыми. –

+0

Спасибо за подсказку, я понял, что я делаю неправильно и исправил ее. Я отвечу отдельно. Как вы и предполагали, это был не легкий ветерок, который вызывал проблемы, он был угловатым. – devC

1

Я изменил свой код следующим образом и теперь сохранить работает:

function getLocationById(clientId, locationId) { 
     var self = this; 
     var location = null; 

     return EntityQuery.from('GetLocationById') 
          .withParameters({ clientId: clientId, locationId : locationId }) 
          .using(self.manager) 
          .execute() 
          .then(querySucceeded, this._queryFailed); 

     function querySucceeded(data) { 
      if (data.results.length > 0) { 
       location = data.results[0]; 
      } 
      logSuccess(localize.getLocalizedString('_RetrievedLocations_'), locations, true); 
      return location; 
     } 
    } 

Обратите внимание, что я возвращаю объект местоположения, и в моем контроллере, я связать объект местоположения моей POJO.

 function getLocationDetails() { 
     clientcontext.location.getLocationById($route.current.params.clientId, $route.current.params.id) 
    .then(function (data) { 
     basicLocationSettings.location = data; 
     basicLocationSettings.saveLocationSettings = saveLocationSettings; 
    }); 
    } 

Теперь, когда я называю SaveChanges(), я передать объект местоположения в хранилище:

 function saveLocationSettings() { 
     clientcontext.location.saveLocationSettings(basicLocationSettings.location); 
    } 
Смежные вопросы