Ember-data:创建一条记录(如果不存在)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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')

看起来Ember试图呈现承诺而不是等待它解决。

这会导致错误,因为.format不是承诺的方法。

我想这是一个非常常见的用例,但我理解失败了。非常感谢!

我不确定它是否相关,但我的后备商店是通过ember-local-storage的sessionStorage

答案

我同意Ember可能会试图兑现承诺,而不是等待承诺解决。不幸的是,我目前无法重现错误。

在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的作者可能会有一些额外的有用指导,这些指导可能是值得的。 The Guide to Promises in Computed Properties

以上是关于Ember-data:创建一条记录(如果不存在)?的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter:检查记录是不是存在

在 Cloud Firestore 中如何制作一个,只创建一次安全规则

创建一条水平线

EmberJS / Ember-data:尽管存在所有ID,但hasMany集合不完整

从 Excel 填充访问记录

使用 CSS 在元素后面创建一条线:before