2017-01-17 17 views
0

마크 업이 기본 페이지 내에있을 때 잘 작동하는 내장 된 BorderContainer가 있습니다. 테두리 컨테이너 마크 업을 템플릿이있는 위젯 내부로 옮길 때 문제가 발생하고 테두리 컨테이너는 모든 하위 항목을 왼쪽 상단의 서로 위에 놓습니다. 여기 dijit embedded BorderContainer가 템플릿 내에서 작동하지 않습니다.

는 문제를 보여줍니다 최소한의 조각 : 나는 도장 버전으로 로컬로 실행하면 http://embed.plnkr.co/cngYmG6BMKcUxwKQy2Du/

같은 일이 발생을 1.12.1

당신은 내가 놓친 거지 무엇을 말해 줄 수주십시오?

dijit._WidgetsInTemplateMixin의 문서에 명시된 바와 같이
+0

높이 문제가 있습니다. 위젯 선언적 인스턴스화로 인해 발생했다고 생각합니다. 프로그래밍 방식의 인스턴스화를 시도 했습니까? –

+0

아니요 프로그래밍 방식의 인스턴스화를 시도하지 않았습니다. 방금 해결 방법으로 해킹을 발견했습니다. setTimeout 내부의 임베디드 BorderContainer에 대한 resize() 호출 : https://embed.plnkr.co/VNDsd7iT82IqdIFQbaxy/. 그러나 나는 그것에 의존하지 않을 것입니다. – brunesto

답변

0

...

dijit._WidgetsInTemplateMixin 믹스 인 어린이로 레이아웃 위젯을 추가 지원하지 않습니다. 특히 startup() 및 resize() 호출에 문제가 있습니다.

+0

Dojo/Dijit에서 레이아웃 위젯을 포함 할 수있는 작은 파일로 마크 업을 분할하는 다른 방법이 있습니까? – brunesto

+0

내 지식에는 아무런 지원이되지 않습니다. bRIMO 솔루션을 사용한다고해도 이벤트 문제를 '크기를 조정'할 수 있습니다.이 경우 문제가되는 창 크기 조절기로 해결할 수 있습니다. 이상적으로는 (a) 귀하의 모든 레이아웃을 장식적인 방식으로 앞에 배치하거나 (b) 위젯의 레이아웃을 표준 '반응 형'디자인으로 대체해야합니다. –

+0

@LewisM 예,하지만 프로그래밍 방식으로 크기 조정 이벤트가 필요하지 않습니다! 그것은 올바르게 렌더링 되었습니까? –

0

루이스는이 어린이들과 같은 레이아웃 위젯을 지원하지 않습니다 언급 한 바와 같이 나는 다음과 같은 설정의 주요 스크립트 내부의 위젯을 인스턴스화하여 프로그래밍 방식을 사용하고, 당신에게 제안하는 것 :

require(["dojo/_base/array", 
     'dojo/_base/declare', 
     "dojo/parser", 
     "dojo/on", 
     "myapp/MyWidget", 
     "dijit/layout/ContentPane", 
     "dijit/layout/BorderContainer", 
     'dojo/domReady!'], 
     function(array, declare, parser, on, MyWidget) { 
      console.log("b4 parse ....") 
      parser.parse().then(function() { 
       console.log("after parse ...."); 

       //create your widget here 
       new MyWidget({}).placeAt("borderContainer3"); 

      }); 
     } 
); 

당신이 할 수있는 맞춤형 Plunker을 찾으십시오.

+1

bRIMOs에게 제안 해 주신 점 감사, 그러나 템플릿에 다른 문제가있는 contentPanes 안에 추가 물건을 추가하면 라이프 사이클과 관련이있는 것 같습니다. – brunesto

1

이 방법을 사용할 수는 있지만 직접 크기 조정 요청을 BorderContainer로 전달해야합니다.

한 가지 규칙은 Dojo 레이아웃 위젯에 자식 위젯이 하나만있는 경우 크기 조정을 호출한다는 것입니다. 여러 위젯이있는 경우 각 위젯에 부여 할 공간이 얼마인지 알지 못하므로 손을 위로 던져서 크기를 알아낼 수 있습니다.

서식 파일의 BorderContainer에 첨부 지점 이름을 data-dojo-attachpoint="bc"으로 지정하십시오. 그런 다음 resize 메소드를 오버로드하고 크기 조정 요청을 전달하십시오.

isLayoutContainer: true, 

resize: function(changeSize, resultSize) { 
    this.inherited(arguments);   
    this.bc.resize(changeSize, resultSize); 
} 

이것은 BorderContainer가 크기 조정에 적합한 유일한 것으로 가정합니다. 즉, 위젯의 모든 공간을 차지합니다.

이제 자녀에게 resize를 호출하기 때문에 레이아웃 위젯처럼 작동하므로 그림과 같이 isLayoutContainer을 정의해야합니다. resize API의 문서화가 잘되어 있지 않으며 isLayoutContainer도 훨씬 적습니다. 이 기능이 없으면 창 크기가 변경 될 때 외부에서 크기를 조정할 수 있습니다.

테두리 컨테이너 위나 아래에 내용을 나중에 만드는 경우 그에 따라 changeSize.w 및 changeSize.h를 조정해야합니다. 그리고과 같은 호출에서는 changeSize와 resultSize가 제공되지 않으며 현재 크기를 사용해야하거나 그렇지 않으면 계산해야합니다. 이 경우에 dojo/dom-geometry이 도움이됩니다.