2012-11-16 4 views
1

내 Ember.Router가 성장하고 성장하고 곧 30 개 이상의 URL 경로를 유지하게 될 것 같습니다. 이제는 이러한 많은 경로가 동일한 작업을 수행합니다. 예를 들어 헤더 콘센트 (예 : 모든 경우의 80 %)를 연결합니다.Ember에서 코드 중복을 피하십시오.

이러한 중복을 피하기 위해 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()); 
     } 
    }) 
    }) 
}); 
+0

당신이 jsfiddle 또는 귀하의 질문에 대한 몇 가지 코드를 추가 할 수 있습니다, 라우터는 다음과 같이 것이라고 말했다에 beeing 그건 (예 :/기사/게시물) ? – zentralmaschine

+0

저기 ... – kraftwer1

답변

1

그냥 생각은 .. 실제로 테스트 해 보지 않았다, 그러나 나는 이것에 유사한이 실제로 작동하는지

// 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()); 
      } 
     }) 
     ... 
    }) 
}) 

확실하지 가능한 것이 무엇인가를 생각; 내가 가정 한 가정에 기반한 아이디어 일뿐입니다.

+0

꽤 재미있어 보이네. 고마워. 나는 그것을보고 다른 한편으로는 사람들이 또한 이것에 접근 할 수 있는지를 볼 것입니다 ... – kraftwer1

+0

나는 당신이 더 좋은 접근법을 찾을 것이라고 확신합니다. 이것은 단지 임의의 아이디어입니다 :) 어느 쪽이든 우리에게 무엇을 알리시겠습니까? 너는 정착 할거야. 내가해야 할 일 이니까. 그리고 지금까지는 그것에 대해 생각 해보지 않았어. P – MilkyWayJoe

+0

좋아, 할께! – kraftwer1

1

아마도 다른 방법으로는 중첩 된 경로를 사용할 수 있습니다. 여기까지 내가 이해하는 한 기사는 header 콘센트를 연결하고 게시물은 게시물을 연결합니다 outlet. 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()); 
     } 
    }) 
    }) 
}); 
+0

OP가 기사와 게시물을 실제로 통과하는 경우 더 나은 접근 방법입니다. 나는 이미이 방법을 몇 번이나 해봤지만, 모르겠다. 나는 내 자신의 마이크로 라이브러리로 물건을 확장하고 거기에서 벗어나는 경향이있다. 그러나 이것이 실제로 (/ 기사/게시물) 경우라면, 아마도 이것이 최선의 접근 방법 일 것입니다. – MilkyWayJoe

+0

네가 맞다. 그는 그에게 더 잘 맞는 것을 선택할 수있다. 앱이 주마다 디자인되는 방식의 문제입니다. 기본적으로 게시물이 한 기사와 관련이 있다면 중첩 된 경로가 좋다고 말하고, 그렇지 않으면 솔루션이 더 좋을 것입니다. –

+0

'솔루션'이 작동하는지 확실하지 않습니다. 단지 아이디어 일뿐입니다. 가끔씩 상속 방법을 너무 많이 사용한다고 생각합니다. P – MilkyWayJoe

관련 문제