gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:52:02 25 4
gpt4 key购买 nike

我有一个计算属性,如果记录不存在,我试图创建一个记录,但在尝试呈现计算属性时不断收到 jQuery.Deferred 异常

这是我目前所拥有的:

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 正在尝试自己呈现 promise ,而不是等待它解决。

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

我想这是一个非常常见的用例,但我理解有误。非常感谢您的帮助!

我不确定它是否相关,但我的后备存储是来自 ember-local-storage 的 sessionStorage

最佳答案

我同意 Ember 可能会尝试自己呈现 promise ,而不是等待 promise 解决。不幸的是,我现在无法重现错误。

在 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();
},

});

但是,如果计算属性中的 promise 有用,Ember Igniter 的作者可能会提供一些额外的有用指导,这可能是值得的。 The Guide to Promises in Computed Properties

关于javascript - Ember-data:如果不存在则创建一条记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47963838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com