出于报告目的,我想将一些元数据与Ember路线相关联,并希望按以下方式进行:
this.route('list', { path: '/list', description: 'Master List' });
然后从路由本身或其他地方访问此description
属性,例如应用程序路由器上的didTransition
挂钩。我已经回顾了路由器和路由的来源,并且不能说我真的理解它,当然不能很好地理解如何检索以这种方式指定的自定义属性。我看到有一个名为DSL的对象,它显然是this
上this.route
方法中指定的map
的{{1}},但无法看到如何从此处获取那里。在Router
的子类中,我看到了名为Ember.Route
和this.router
的属性,但我们不清楚它们指向的是什么。
或者,如果允许我按照自己的意愿行事,以下内容也会有效:
this.router.router
我可以将自定义属性与this.route('list', { path: '/list' }, function() {
this.description = "Master List";
});
中指定的路由相关联,如果是,如何关联?
答案 0 :(得分:2)
在路由器中定义路由时,似乎没有一种优雅的方式来设置路由的元数据,但也许在应用程序控制器中尝试这个丑陋的解决方案:
currentPathChange: function () {
switch(this.get('currentPath')){
case 'test.index':
console.log('test.index is the foo!');
break;
case 'test.new':
console.log('test.new is the bar!');
break;
}
}.observes('currentPath')
答案 1 :(得分:0)
如果不扩展Ember的路由器,一个选项就是拥有一个维护路由元数据的独立对象。简单的例子:
<ProjectReference>
访问this.route('list', { path: '/list' });
routeMetaData['list'] = 'Master List';
挂钩中的元数据:
didTransition
答案 2 :(得分:0)
我最终按照以下几行解决了这个问题,编写了我自己的“路由”功能,记录了我需要的数据,然后将其传递给DSL:
var myRouteData = {};
function route(dsl, name, options, fn) {
if (typeof options === 'function') fn = options, options = {};
var routeName = dsl.parent ? dsl.parent + '.' + name : name;
myRouteData[routeName] = { options.myRouteOption };
dsl.route(name, options.fn);
}
用法:
this.resource('foo', function() {
route(this, 'bar', {myRouteOption: true});
});