我有以下控制器:
Filters.FiltersController = Ember.ArrayController.extend({
needs: ["milestones"],
selectedMilestone: null,
selectedMilestoneChange: function() {
if(!this.get('filterTypeSelected') || !this.get('selectedMilestone')) {
return;
}
var filter = this.store.createRecord('filter', {
type: 'milestone',
value: this.get('selectedMilestone').get("id"),
negate: this.get('filterTypeSelected').negate,
milestone: this.store.find('milestone', this.get("selectedMilestone").get("id"))
});
filter.save();
this.resetFilterCreator();
}.observes('selectedMilestone')
});
每当视图更改selectedMilestone
属性时,它都会创建一个新的filter
实例并保存它。
直到我升级到Ember-canary才能使用query-parameters-new功能。升级后,无论何时创建过滤器记录,都会引发以下错误:
未捕获错误:断言失败:您只能在此关系中添加“里程碑”记录
错误源自
milestone: this.store.find('milestone', this.get("selectedMilestone").get("id"))
模型是:
Filters.Filter = DS.Model.extend({
type: DS.attr('string'),
value: DS.attr('string'),
milestone: DS.belongsTo('milestone'),
negate: DS.attr('boolean')
});
我如何使这项工作?
答案 0 :(得分:4)
问题是(显然在较新的Ember版本中),this.store.find(...)
的回报是承诺,因此不是instanceof Milestone
。
相反,您可以解决承诺或使用this.store.getById('model', 'id')
。但是,这需要已经检索到模型(在我的情况下它是onLoad
。)