【发布时间】:2014-07-03 17:50:29
【问题描述】:
我正在尝试实现一个控制器 needing 另一个(CampaignsNew 需要 AppsIndex),看起来像
App.CampaignsNewController = Ember.Controller.extend({
needs: ['appsIndex']
});
在我的CampaignsNew 模板中,我通过它展示它
{{#if controllers.appsIndex.content.isUpdating}}
{{view App.SpinnerView}}
{{else}}
{{#each controllers.appsIndex.content}}
{{name}}
{{/each}}
{{/if}}
但是controllers.appsIndex.content.isUpdating 从来都不是真的。 IE。它会尝试在数据加载之前显示数据。
我的AppsIndex 路由覆盖了模型:
App.AppsIndexRoute = Ember.Route.extend({
model: function(controller) {
var store = this.get('store').findAll('app');
}
...
});
如果我将相同的代码放入我的CampaignsNew 路由并将模板修改为each 到controller.content,我可以让它工作。哪个告诉我needs 没有使用该路由?如果我转到 /apps 页面并加载数据,然后导航到 /campaigns/new 页面,它也可以工作。
如何让它工作?谢谢!
编辑: 根据要求,我的路由器的相关部分:
App.Router.map(function() {
this.resource('apps', function() {
...
});
this.resource('campaigns', function() {
this.route('new');
});
});
AppsIndex 的访问地址为 /apps,CampaignsNew 的访问地址为 /campaigns/new
编辑2: 在执行@kingpin2k 的建议后,我发现 Ember 抛出了一个错误。以下是更新的文件和收到的错误。
App.CampaignsNewController = Ember.ObjectController.extend({
pageTitle: 'New Campaign'
});
App.CampaignsNewRoute = Ember.Route.extend({
model: function(controller) {
return Ember.RSVP.hash({
campaign: this.store.createRecord('campaign'),
apps: this.store.find('app')
});
// return this.store.createRecord('campaign');
},
setupController: function(controller, model){
controller.set('apps', model.apps);
this._super(controller, model.campaign);
}
});
Ember 抛出此错误:
Error while loading route: Error: Assertion Failed: Cannot delegate set('apps', <DS.RecordArray:ember689>) to the 'content' property of object proxy <App.CampaignsNewController:ember756>: its 'content' is undefined.
我read online 这是因为内容对象不存在。如果我这样设置:
App.CampaignsNewController = Ember.ObjectController.extend({
content: Ember.Object.create(),
...
});
然后页面加载没有错误,当检查 Ember Chrome 扩展时,我可以看到数据已经加载。但它不会显示在页面上。我想这是因为 content 对象存在,所以 Ember 在渲染模板之前没有等待模型的承诺实现。不过,您必须以这种方式定义内容似乎很奇怪。有关如何处理此问题的任何见解?
Edit3:在another thread为我回答的问题
【问题讨论】:
-
你会展示你的路由器吗?并提及您实际到达的路线
foo/bar/1 -
我在上面编辑并添加了,@kingpin2k
标签: ember.js ember-data