Ember: Даже после обновления некоторые атрибуты в модели не меняются - PullRequest
0 голосов
/ 22 ноября 2018

Я новичок в EmberJS, и столкнулся с проблемой обновления данных модели

Контроллер :

export default Ember.Controller.extend({
queryParams: ['jobid'],
jobid: null,
currentCount: null,

actions: {
 onOffToggle(e) {
  var isChanged = this.get('model.b.isChanged');
  this.set('model.b.enable', e.target.checked);
  this.set('model.b.isChanged', !isChanged);
  console.log(this.get('model.b.isChanged'))
},
iterationCountChange() {
  var currentCount = this.get('currentCount');
  var isCountChanged =
      (currentCount != this.get('model.b.count')) ? true : false;
  this.set('model.b.isCountChanged', isCountChanged);
}
}});

Маршрут:

export default Ember.Route.extend({
ajax: Ember.inject.service(),

beforeModel: function (transition) {
this.jobid = transition.queryParams.jobid;
},
model(){
  return Ember.RSVP.hash({
    a:   this.store.queryRecord('a', {jobid: this.get("jobid")}),
    b: this.store.queryRecord('b', {id: this.get("jobid")})
 });
},
setupController: function(controller, model) {
  this._super(controller, model)
controller.set('currentCount', model.b.get('iterationCount'))
},

actions: {
 paramChange(a, b)
  Ember.$.ajax({
    url: "/rest/test",
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify({
       b: b,
       a: a
     })
   }).then(response => {
    this.refresh();
  })
},
error(error, transition) {
  if (error.errors[0].status == 404) {
    return this.transitionTo('not-found', { queryParams: {'previous': window.location.href}});
   }
  }
 }
});

Здесь, в контроллере, я отслеживаю, изменились ли некоторые значения, и если они изменились, обновите флаг, связанный с их изменением, такие флаги, как isChanged и isCountChanged, являются частью данных модели.после того, как пользователь нажимает кнопку отправки, вызывается действие paramChange, затем выполняется пост-вызов для обновления БД для соответствующих изменений свойств, а затем вызывается this.refresh() для отображения последних данных модели.

Нопроблема заключается в том, что как только isChanged и / или isCountChanged изменяются со значения по умолчанию, они не сбрасываются на новое значение, присутствующее в данных модели, например, после refresh значение обоих этих флагов должно бытьСброс на ложь, но это всегда происходит, я проверил значение в хуке setUpController для значений этих флагов, и это подтверждает истину.

По моему мнению, это имеет отношение к контроллеру, так как любойvalue, который используется в контроллере один раз, не сбрасывается на новое значение, которое приходит после refresh.

Пожалуйста, помогите Я потратил много времени на это и ничего не получил до сих пор, сообщите, если требуется какая-либо дополнительная информация.

Ember версия: 2.6

1 Ответ

0 голосов
/ 24 ноября 2018

Из документов,

Обновите модель на этом маршруте и любых дочерних маршрутах, запустив ловушки beforeModel, model и afterModel аналогично тому, как вводятся маршруты при переходе из другого маршрута.,Параметры текущего маршрута (например, article_id) будут переданы в соответствующие ловушки модели, и если будет возвращена другая модель, setupController и связанные ловушки маршрута также будут повторно запускаться.

Так что, еслиданные вашей модели не меняются, setupController() не вызывается.Мой подход заключается в том, чтобы иметь собственный метод для обновления контроллера с данными модели.Затем я вызываю этот метод из model() hook (для this.refresh()) и из setupController().

model() {
  return this.store.query(....).then(data => this.updateControllerData(data));
}

setupController(controller, model) {
  this._super(...arguments);

  this.updateControllerData(data);
}

updateControllerData(data = {}) {
  if (!this.controller) {
    return;
  }

  this.controller.setProperties(data);
}

Обратите внимание, что если setupController() не запускается, данные контроллера всегда обновляются.

...