Ember-data: 记录不存在就创建?
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
不是 promise 的方法。
我想这是一个非常常见的用例,但我理解有误。非常感谢帮助!
我不确定它是否相关,但我的后备存储是来自 ember-local-storage
的 sessionStorage
我同意 Ember 可能会尝试自己呈现 promise,而不是等待 promise 解决。不幸的是,我现在无法重现错误。
在Ember.js中,通常建议在路由文件中放置数据调用。这将允许您的 query/save 和所有其他数据收集在加载模板文件之前发生。您描述的计算 属性 显示没有依赖键,因此这可能证明将调用移动到您的场景的路由文件是合理的。
通用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
我有一个计算的 属性,如果记录不存在,我会尝试在其中创建一个记录,但在尝试呈现计算的 属性 时,会不断收到 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
不是 promise 的方法。
我想这是一个非常常见的用例,但我理解有误。非常感谢帮助!
我不确定它是否相关,但我的后备存储是来自 ember-local-storage
的 sessionStorage我同意 Ember 可能会尝试自己呈现 promise,而不是等待 promise 解决。不幸的是,我现在无法重现错误。
在Ember.js中,通常建议在路由文件中放置数据调用。这将允许您的 query/save 和所有其他数据收集在加载模板文件之前发生。您描述的计算 属性 显示没有依赖键,因此这可能证明将调用移动到您的场景的路由文件是合理的。
通用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