我有一个看起来像这样的链接
index.html#/calendar/year/month
这就是我设置路线的方式:
App.Router.map(function() {
this.resource('calendar', {path: 'calendar/:currentYear/:currentMonth'});
});
App.CalendarRoute = Ember.Route.extend({
model: function (params) {
var obj = {
weeks: calendar.getDaysInMonth(params.currentMonth, params.currentYear),
currentMonth: params.currentMonth,
currentYear: params.currentYear
};
return obj;
},
setUpController: function(controller, model) {
controller.set('content', model);
}
});
我可以这样做:
var currentMonth = this.get('content.currentMonth');
var nextMonth = parseInt(currentMonth)+1;
var route = '#/calendar/'
var year = this.get('content.currentYear');
window.location.href= route + year + '/' + nextMonth;
但我想改用路由器。
我试过了:
var router = this.get('target');
router.transitionTo('#calendar/'+year + '/' + nextMonth);
但是我收到了这个错误:
未捕获错误:断言失败:未找到路线#calendar / 2013/5
我也尝试过:
var router = this.get('target');
router.transitionTo('calendar/'+year + '/' + nextMonth);
但这也给了我一个错误:
未捕获错误:断言失败:未找到路线日历/ 2013/5
修改:在上方显示我的路线
答案 0 :(得分:4)
根据我在评论中所说的内容,使用Route#serialize
实际上可以在不需要嵌套路由的情况下完成。
我制作了this fiddle(demo here),其方案类似于您所描述的情景:
在应用程序中,我正在存储月份和年份参数
window.App = Ember.Application.create({
title: 'Cool App',
calendar: {
month: new Date().getMonth()+1,
year: new Date().getFullYear()
}
});
定义路线
App.Router.map(function() {
this.route("home");
this.resource('calendar', { path: 'calendar/:year/:month'});
});
在日历路线中,我添加了serialize
方法,将obj
中的属性翻译为应用,然后我与setupController
中的第三方库连接,以获取days
属性并设置其内容。
App.CalendarRoute = Em.Route.extend({
activate: function() {
$(document).attr('title','Events')
},
serialize: function(obj) {
return {
year: obj.year, month: obj.month
}
},
setupController: function(controller, model) {
var obj = {
days: calendar.getDaysInMonth(model.month, model.year),
year: model.year,
month: model.month
};
controller.set('content', obj);
}
});
在Handlebars中,使用{{linkTo}}
帮助器,我将calendar
类中定义的App
属性作为参数传递:
{{#linkTo calendar App.calendar tagName="li"}}
<a {{bindAttr href="view.href"}}>
Calendar
</a>
{{/linkTo}}
这将生成指向~/#/calendar/2013/4
答案 1 :(得分:0)
路由器不仅仅是一个网址管理器。它管理整个应用程序的状态。为了完全帮助您,最好看到更多代码。你创建了路线吗?你是不是只想去找一个没有被ember app处理的'url'?
据我所知, this.transistionTo(routeName)
期望收到一条命名路线。然后它将为该路由生成正确的URL。如果您还没有设置任何路线,那么我认为您无法使用它。