簡體   English   中英

避免 Ember.Router 中的代碼重復?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM