我正在开发一个基本的ember.js应用程序,并且对某些行为感到困惑。我有一些看起来像这样的路线:
this.resource('campaigns', { path: '/campaigns'}, function() {
this.route('new', { path: '/new' });
this.route('campaign', { path: '/:campaign_id' });
});
App.CampaignsIndexRoute = Ember.Route.extend({
model: function() {
App.Keyword.find();
return App.Campaign.find();
},
renderTemplate: function(controller, model) {
this.render({outlet: 'page'});
}
});
App.CampaignsCampaignRoute = Ember.Route.extend({
model: function(params) {
alert("Model Firing");
console.log(params.campaign_id);
return App.Campaign.find(params.campaign_id);
},
renderTemplate: function(controller, model) {
this.render({outlet: 'page'});
alert("Template Firing");
}
});
......以及一个看起来像这样的视图:
App.CampaignsCampaignView = Em.View.extend({
templateName: 'templates/campaigns/campaign',
});
...以及一个看起来像这样的主模板:
<!-- ================================================== -->
<!-- =================== APP HEADER =================== -->
<!-- ================================================== -->
{{ view App.HeaderView }}
<!-- ================================================== -->
<!-- ======================= APP ====================== -->
<!-- ================================================== -->
<div id="app" class="">
<!-- ================================================== -->
<!-- ==================== SIDEBAR ===================== -->
<!-- ================================================== -->
<div id="sidebar">
{{ view App.NavigationView }}
{{ view App.StarredCampaignsView }}
</div>
<!-- ================================================== -->
<!-- ====================== STAGE ===================== -->
<!-- ================================================== -->
<div id="stage" class="">
<!-- ================================================== -->
<!-- ================= STAGE SIDEBAR ================== -->
<!-- ================================================== -->
<div id="stage-sidebar" class="">
{{ view App.StageSidebarView }}
</div>
<!-- ================================================== -->
<!-- ====================== PAGE ====================== -->
<!-- ================================================== -->
<div id="page" class="">
{{ outlet page }}
</div>
</div>
</div>
正如您所看到的,在CampaignsCampaign路线中有两个非常简单的提醒,只是为了让我知道正在激活的内容。
因此,/#/ campaign返回广告系列列表,/#/ campaign / new返回创建页面和/#/ campaigns /:campaign_id应显示单个广告系列及其详细信息。
这一切都可以从系统内部完美运行。当您从/#/ campaign视图点击广告系列时,它会直接链接到详细视图,并加载所有正确的信息。
问题
如果您只输入类似“http://mysite.com/#/campaigns/ANY_ID而不点击列表视图中的链接,则会出现问题。页面只会加载空白而且未调用renderTemplate (没有警报)。模型正在加载(获取警报)并且params.campaign_id正在成功传递(可以成功登录到控制台)。
我认为这是一个路由器问题,但我不知道从哪里开始。任何帮助将不胜感激。
谢谢你看看!我可以发布更多信息,让我知道您在评论中需要什么。
答案 0 :(得分:4)
直接转到某个页面时所遵循的过程与您按照链接略有不同。我没有看到模板中的链接,所以我不是100%确定发生了什么,但一般来说,如果你去链接
{{#linkTo myRoute myVar}} A Link {{/linkTo}}
路由不运行model
函数,您只需以myVar
作为模型开始(但您仍然执行setupController
函数)。
因此,要使硬链接起作用,您需要一个model
函数来收集链接变量传递的信息。