[英]Avoid code duplication in Ember.Router?
我的 Ember.Router 越來越大,看起來它很快就會維護 30 多個 URL 路由。 現在,很多這些路由都做同樣的事情,例如連接一個集管出口(在所有情況下可能有 80%)。
是否有 Ember.js 方法來避免這些冗余? 或者我應該將重復的部分移動到一個函數中並調用它?
更新
如您所見,共有三種不同的路由(文章、帖子和用戶)。 其中兩個連接集管出口,而第三個沒有。 現在想象一下,將有 25 條路線連接集管出口,而 5 條不連接。 我怎樣才能避免這些重復?
App.Router = Em.Router.extend({
root: Em.Route.extend({
articles: Em.Route.extend({
route: "/articles",
connectOutlets: function(router) {
router.get("applicationController").connectOutlet("header", "header");
router.get("applicationController").connectOutlet(articles, App.Article.find());
}
}),
posts: Em.Route.extend({
route: "/posts",
connectOutlets: function(router) {
router.get("applicationController").connectOutlet("header", "header");
router.get("applicationController").connectOutlet("posts", App.Post.find());
}
}),
users: Em.Route.extend({
route: "/users",
connectOutlets: function(router) {
// Don't connect the header here!
router.get("applicationController").connectOutlet("users", App.User.find());
}
})
})
});
只是一個想法..我還沒有實際測試過,但我認為類似的事情是可行的
// some custom route
var CommonRouteOrSomething = Em.Route.extend({
route: "/",
connectOutlets: function(router) {
router.get("applicationController").connectOutlet("header", "header");
}
})
App.Router = Em.Router.extend({
root: Em.Route.extend({
articles: CommonRouteOrSomething.extend({
route: '/articles', // override route string
connectOutlets: function(router) {
// your other outlet will be connected on the super class
this._super(router);
// then your actual outlet
router.get("applicationController")
.connectOutlet(articles, App.Article.find());
}
})
...
})
})
不確定這是否真的有效; 就像我說的,這只是一個基於假設的想法
也許另一種方法是使用嵌套路由。 這里據我了解,文章連接header
插座,帖子連接帖子outlet
。 為了轉到posts
路線,我假設您首先必須轉到文章路線。 (即/articles/posts)正如蜜蜂所說,路由器將如下所示:
App.Router = Em.Router.extend({
root: Em.Route.extend({
articles: Em.Route.extend({
route: "/articles",
connectOutlets: function(router) {
router.get("applicationController").connectOutlet("header", "header");
router.get("applicationController").connectOutlet(articles, App.Article.find());
},
posts: Em.Route.extend({
route: "/posts",
connectOutlets: function(router) {
router.get("applicationController").connectOutlet("posts", App.Post.find());
}
}),
}),
users: Em.Route.extend({
route: "/users",
connectOutlets: function(router) {
// Don't connect the header here!
router.get("applicationController").connectOutlet("users", App.User.find());
}
})
})
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.