在使用Ember 1.0-rc2发货的 new Ember.Router
中,是否可以在运行时添加路由?
答案 0 :(得分:4)
目前没有支持的方法。 App.Router.map
调用由此代码的第235-247行处理:https://github.com/emberjs/ember.js/blob/master/packages/ember-routing/lib/system/router.js
Ember.Router.reopenClass({
map: function(callback) {
var router = this.router = new Router();
var dsl = Ember.RouterDSL.map(function() {
this.resource('application', { path: "/" }, function() {
callback.call(this);
})
});
router.map(dsl.generate());
return router;
}
每次拨打Router.map
时都会覆盖地图,因为上一次调用Router.map
的回调未被保留。
修改强>
无论好坏,我都有一个拉取请求来改变行为以允许多次调用App.Router.map
。我们会看到会发生什么。您可以点击此处https://github.com/emberjs/ember.js/pull/2485
另一个编辑
我写了一个要点来做我的拉请求在userland中做的事情。这将允许您在运行时映射路由。只需添加此代码,然后使用我定义的方法
替换您对App.Router.map
的调用
https://gist.github.com/grep-awesome/5406461
回答更改编辑
在此拉取请求中,您现在可以多次致电map
。 https://github.com/emberjs/ember.js/pull/2892
答案 1 :(得分:1)
我看到wmarbut的答案尚未被接受,但它是一个很好的答案(对我而言)。似乎他的补丁正在进入Ember版本,但在此之前,这是一些使用他的补丁的代码。 (不要接受我的回答,我很高兴找到这个。)我打算将它作为解决方案的一部分,让内容推动导航。好问题,user1517325和谢谢,wmarbut!
// was an all-in-one router map as Ember likes it
// App.Router.map(function() {
// this.resource("foods", function(){
// this.route("index", {path: "/"});
// });
// this.route("fourOhFour", { path: "*:"});
// });
//wmarbut's workaround until his patch is applied
App.map_routes = [];
App.MapRoutes = function(routes) {
App.map_routes.push(routes);
return App.Router.map(function() {
var route_lamda, _i, _len, _ref;
_ref = App.map_routes;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
route_lamda = _ref[_i];
route_lamda.call(this);
}
return true;
});
};
//partial mapping
App.MapRoutes(function() {
this.resource("foods", function(){
});
});
//some more mapping
App.MapRoutes(function() {
this.resource("foods", function(){
this.route("index", {path: "/"});
});
});
//even more mapping
App.MapRoutes(function() {
this.route("fourOhFour", { path: "*:"});
});
答案 2 :(得分:1)
在最新版本的ember.js rc7 中,已将功能添加到Router.map
,以允许多次调用它而不会覆盖地图。这将允许在运行时添加路由。
希望它有所帮助。