dou*_*lea 13 ember.js ember-router
这似乎表明答案是肯定的:
从Ember Pre1到Pre4:每条路线有多个动态段?更新:动态细分的允许语法是什么?
......但我只是想确认一下.
就我而言,作为一个学习练习,我在Ember建立一个日历,每月显示.我需要能够从给定的月份链接到上个月,然后到下个月.
所以我希望能够
{{ linkTo calendar_month year month }}
Run Code Online (Sandbox Code Playgroud)
和
this.transitionTo('calendarMonth', year, month)
Run Code Online (Sandbox Code Playgroud)
想知道如果不使用嵌套资源这是否可行.我可以使用类似的东西:
App.Router.map(function() {
this.resource("year", { path: "calendar/:year" }, function() {
this.resource("calendar_month", { path: "/:month" }, function() {
this.route('index');
});
});
});
Run Code Online (Sandbox Code Playgroud)
...但这涉及从建模角度引入一个可能不需要存在的Year对象,这样我就可以在linkTo中使用它的id
我更愿意设置一个包含两个参数/动态段的路线:
App.Router.map(function() {
this.route('calendar_month', { path: 'calendar/:year/:month'});
});
Run Code Online (Sandbox Code Playgroud)
但我是否正确,这是不可能的?我只是想确保我这样做是最干净,最愚蠢的方式.
换一种方式:
我理解这个概念"如果您的用户界面是嵌套的,那么您的路由应该嵌套",但是,如果我的网址是嵌套的,这并不一定意味着我的界面也会嵌套.所以我想知道:如果我的网址是嵌套的,那么构建相应的嵌套模型总是最佳做法吗?
任何指导/澄清非常感谢.
谢谢,
mav*_*ein 17
由于我是你提到的问题的提问者,我在这里回答.我已经更新了我的问题,这是完全可能的.
你的方法应该有效:
App.Router.map(function() {
this.route('calendar_month', { path: 'calendar/:year/:month'});
});
Run Code Online (Sandbox Code Playgroud)
您需要添加的是序列化和模型钩子实现:
serialize: function(context){
// i assume that you wrap year and month in an Object (maybe App.YearAndMonthObject)
var ret = {
year : context.get("year"),
month : context.get("month")
};
return ret;
},
model : function(params){
//somehow create your object from the params
var model = App.YearAndMonthObject.create({
year : params.year,
month : params.month
});
return model;
}
Run Code Online (Sandbox Code Playgroud)
这还需要修改你对linkTo的使用:
{{ linkTo calendar_month year month }}
Run Code Online (Sandbox Code Playgroud)
...而你只会使用:
{{ linkTo calendar_month yearAndMonth }}
Run Code Online (Sandbox Code Playgroud)
我认为这是处理这个问题的一种愚蠢方式.
简介:那么路线到底是什么?
它们用于区分问题.在你的情况下似乎是这样,那年和月是同一个问题(=路线)的一部分.因此,它们应该在一个新的Ember对象中包装在一起,你的路径(CalendarMonthRoute)应该处理这个新对象(可能是YearAndMonthObject或CalendarMonthObject?).
| 归档时间: |
|
| 查看次数: |
2459 次 |
| 最近记录: |