到另一个资源抛出未捕获的#error
我有一个'拥有'其他模型(belongsTo,hasMany)的模型,我试图以多步骤的形式创建每个模型。
我将每个link-to
都传递给父模型, campaign
,以便在创建其他记录和显示现有子项时使用它。 当我最初有一个嵌套的route
,这起作用,但是当我将其更改为resource
该campaign
模型看起来并未通过。
我的路由器:
App.Router.map(function () {
this.resource('campaigns', function() {
// I originally had a this.route('step2') which I sent the model to and it works
this.resource('campaign', { path: '/:campaign_id' }, function() {
this.route('edit');
this.resource('ad-groups', function() {
this.route('new'); // new route is irrelevant in this question
});
});
});
});
因此,在campaign/edit
路由器中,我保存模型并将其转换为以ad-groups/index
系列为模型的ad-groups/index
路线:
App.CampaignEditRoute = Ember.Route.extend({
actions: {
save: function(campaign) {
campaign.save().then(function() {
this.transitionTo('ad-groups', campaign);
}.bind(this));
}
}
});
但这是它呈现模板的地方,但Ember检查器显示它没有加载模型。 和我的模型的完整性的相关部分:
App.Campaign = DS.Model.extend({
adGroups: DS.hasMany('ad-group', { async:true }),
...
});
App.AdGroup = DS.Model.extend({
campaign: DS.belongsTo('campaign'),
...
});
如果我手动将广告系列返回到ad-groups/index
的model
钩子中,那么Ember将抛出Uncaught #error
,并呈现模板,但不显示任何模型数据。
编辑:所以我试图通过将model
设置为this.modelFor('campaign')
实现下面的解决方案,并且抛出了另一个Uncaught #error
。 奇怪的是,当我删除我的FIXTURES中的关系时,不再有错误,但当然我失去了这种关系。 我的装置:
App.Campaign.FIXTURES = [
// If I remove the adGroups: [1] it removes the Uncaught #error but I lose the relationship
{ id: 1, name: "Campaign #1", app: 1, adGroups: [1] },
{ id: 2, name: "Campaign #2", app: 1 }
];
App.AdGroup.FIXTURES = [
{ id: 1, name: 'My first AdGroup', bid: 2, budget: 100, campaign: 1 }
];
我之前遇到类似的问题,我通过向我的campaign
模型中添加{ async: true }
来修复它,如上所示。 所以这看起来更像是问题,诚然异步混淆了我一点。 谁能阐明为什么会发生这种情况?
毕竟,这两部分解决方案是:
1.)不是使用link-to
传递model
而是实现这一点:
App.MyRoute = Ember.Route.extend({
model: function() {
return this.modelFor('campaign');
},
...
});
在我看来,这不应该是必要的,但它实际上非常好,因为它使用父路线的模型 - 链接作为参考。
2.)Ember抛出的剩余Uncaught #error
错误极其无益。 事实证明,我在模板中链接到adgroup
ad-group
而不是ad-group
:
{{link-to 'adgroup'}}
而不是{{link-to 'ad-group'}}