2012-11-13 4 views
0

우리는 포탈을 구성하려고합니다. 여기서 레이아웃은 주 레이아웃의 모든 순서에서 원하는 수의 핵심 위젯을 가질 수 있습니다. 그러나템플릿에 여러 인스턴스를로드하려면 어떻게해야합니까?

connectOutlets: function(router, group) { 
    router.get('applicationController').connectOutlet('group', group); 
    router.get('groupController').connectOutlet('pos9', 'toDo', App.ToDo.find(41)); 
    router.get('groupController').connectOutlet('pos3', 'toDo', App.ToDo.find(15)); 

:

<h1>{{title}}</h1> 

{{outlet pos1}} 
{{outlet pos2}} 
{{outlet pos3}} 
{{outlet pos4}} 
{{outlet pos5}} 
{{outlet pos6}} 
{{outlet pos7}} 
{{outlet pos8}} 
{{outlet pos9}} 
{{outlet pos10}} 

그리고 라우터

, 우리는 하나 하나에서 그들을로드를 시도하고이 시뮬레이션

, 우리는 출구의 번호를 가지고 둘 이상이있는 경우 최종 컨텍스트가 사용됩니다. 이 예제에서 우리는 toDo 객체의 두 인스턴스를 얻습니다. 둘 다 id # 15에 해당합니다.

올바른 방식으로 접근하고 있으며 일정한 레이아웃의 콘센트 대신 프로그래밍 방식으로이 작업을 수행 할 수 있습니까?

감사합니다, 댄

답변

1

편집 : 내 대답이 복잡한 솔루션이 정말 귀하의 경우 필요한 것을 전제로하고있다. 귀하의 모든 ToDo 항목에 대해 ArrayController를 사용할 수 있다는 간단한 예제를 기반으로합니다.

router.get('groupController').connectOutlet('pos9', 'toDo', App.ToDo.find(41)); 
router.get('groupController').connectOutlet('pos3', 'toDo', App.ToDo.find(15)); 

당신이 기본적으로 할 것이있다 :

  1. 함께 콘센트에 연결 2 개 라인을 따르고 있습니다

    문제 :하지만, 여기에 복잡한 문제에 대한 답변을 내 시도이다 'todo'라는 컨트롤러로 pos9 이름을 지정하십시오. 이 컨트롤러의 내용을 ID 41의 ToDo로 설정하십시오.

  2. 콘센트를 이름이 'pos3'인 컨트롤러를 'todo'컨트롤러에 연결하십시오. 이 컨트롤러의 내용을 ID가 15 인 ToDo로 설정하십시오 (동일한 컨트롤러의 내용을 재정의 할 수 있도록).
  3. 결과적으로 두 콘센트 모두가 컨트롤러의 동일한 인스턴스에 연결됩니다. 그리고이 단일 인스턴스의 content 속성을 두 번 설정 했으므로 동일한 ToDos입니다. 핵심 문제는 제 관점입니다. EmberJS는 기본적으로 컨트롤러의 단일 인스턴스를 사용합니다.

그래서 내 솔루션 접근 방식은 각 콘센트에 대해 새 컨트롤러를 인스턴스화하는 것입니다. 불행하게도 뷰를 수정해야합니다. 컨트롤러와 뷰는 이름이 일치합니다.

  1. 는 컨트롤러, 예컨대 : VAR newController = App.ToDoController.create()의 새 인스턴스를 만들; 그래서 대략 알고리즘은 의사에있을 것입니다
  2. 이 컨트롤러를 적절한 이름의 라우터에 삽입하십시오 (예 : router.set ('todoControllerForPos9', newController);
  3. 이 이름을 기준으로 Ember를 활성화하여 일치하는보기를 찾도록해야합니다 (예 : App.set ('TodoControllerForPos9View', App.ToDoView);
  4. 마지막으로 라우터에서 connectOutlet을 호출합니다 (예 : router.get ('groupController'). connectOutlet ('pos9', 'todoControllerForPos9', App.ToDo.find (41));

짐작할 수 있겠지만, 나는이 문제를 직접 경험했습니다.나는이 질문을하기 전에 물어 보았다. 그리고 이것이 해결책이다, 나는 생각해 냈다. 내 생각에, 이것은 필자가 누락 된 특징이다. 나는 이것을 동적 출구 이름이라고 부른다. 내 원래 질문보기 : How to implement a list of multiple elements, where an element can be expanded by click? (Dynamic Outlet Names?)

업데이트 섹션과 거기에 제공된 바이올린을 살펴보면 여기 제공된 내 의사 코드를 알 수 있습니다.

누군가가 내 솔루션을 살펴볼 수 있다면 여전히 좋을 것입니다. 왜냐하면 그 순간은 여전히 ​​해킹이지만 나에게 소중한 것 같습니다. 희망이 큰 대답을 지금 몇 가지 관심을 얻을 것이다 :-)

관련 문제