繁体   English   中英

灰烬数据:如果不存在则创建记录?

[英]Ember-data: Create a record if one does not exist?

我有一个计算属性,如果不存在该属性,我会尝试在其中创建一条记录,但是在尝试呈现计算属性时会不断收到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不是.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的作者可能会提供一些其他有用的指导,可能是值得的。 计算属性承诺指南

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM