Ember-data: Создать запись, если она не существует?

У меня есть вычисленное свойство, в котором я пытаюсь создать запись, если она не существует, но продолжаю получать jQuery.Deferred exception при попытке визуализации вычисляемого свойства.

Вот что у меня так далеко:

deadlineDay: computed(function() {
  const oneWeekFromNow = moment().startOf('day').add(1, 'week');
  const store = this.get('store');

  return store.queryRecord('deadline-day', {
    filter: {
      date: oneWeekFromNow
    }
  }).then(result => {
    if (!result) {
      result = store.createRecord('deadline-day', {
        date: oneWeekFromNow
      });

      result.save();
    }

    return result;
  });
}),

Затем в моих шаблонах я пытаюсь сделать рендеринг с помощью простого помощника:

{{display-date deadlineDay.date}}

{{display-date}} помощник просто звонит return date.format('dddd, MMM Do')

Похоже, что Эмбер пытается выполнить само обещание вместо того, чтобы ждать его исполнения.

Это приводит к ошибке, так как .format это не метод обещания.

Я предполагаю, что это чрезвычайно распространенный вариант использования, но у меня есть ошибка в понимании. Большая помощь приветствуется!

Я не уверен, что это уместно, но мое хранилище резервных копий - sessionStorage через ember-local-storage

1 ответ

Решение

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

В Ember.js обычно рекомендуется помещать вызовы данных в файл маршрута. Это позволит выполнить ваш запрос / сохранить и все другие сборы данных до загрузки файла шаблона. На изображенном вами вычисленном свойстве нет зависимых ключей, поэтому это может оправдать перемещение вызовов в файл маршрута для вашего сценария.

универсальный пример route.js:

import Ember from 'ember';

export default Ember.Route.extend({
  async model() {
    let record;
    record = await this.store.queryRecord('record', { queryParams });

    if (!record) {
        record = this.store.createRecord('record', { properties });
    }

    return record.save();
  },

});

Однако, если обещание в вычисляемом свойстве является полезным, у автора Ember Igniter могут быть некоторые дополнительные полезные рекомендации, которые могут быть полезны. Руководство по обещаниям в области компьютерной недвижимости

Другие вопросы по тегам