2012-11-28 3 views
1

에 나는이 같은 창을 만들마이그레이션 엽차는 ExtJS 4.0의 ExtJS 4.1

_target.on("render", function (items) { 
    if (items.length > 0) { 
     this.show(); 
     this.add(items); 
     this.doLayout(); 
     var buttonText = targetParams.ButtonText || this.title; 
     createToolbarButton(this.id, buttonText, targetParams.UIConfigurationId); 
    } else { 
     _target.destroy(); 
    } 
}); 

문제는이 라인 this.show();에 있습니다. 4.0이 선이 기능을

show: function() {   
    this.callParent(arguments); 
    this.performDeferredLayouts(); 
    return this; 
}, 

를 호출하지만 4.1에서 같은 라인은 다른 함수를 호출

show: function(animateTarget, cb, scope) {   
    var me = this; 

    if (me.rendered && me.isVisible()) { 
     if (me.toFrontOnShow && me.floating) { 
      me.toFront(); 
     } 
    } else if (me.fireEvent('beforeshow', me) !== false) { 
     me.hidden = false; 

     if (!me.rendered && (me.autoRender || me.floating)) { 
      me.doAutoRender(); 
     } 
     if (me.rendered) { 
      me.beforeShow(); 
      me.onShow.apply(me, arguments); 

      if (me.ownerCt && !me.floating && !(me.ownerCt.suspendLayout || me.ownerCt.layout.layoutBusy)) { 
       me.ownerCt.doLayout(); 
      } 
      me.afterShow.apply(me, arguments); 
     } 
    } 
    return me; 
}, 

은에서 선 아래로 layout.renderChildren()을 시도하고 다음 오류가 있습니다.

나는 생성 된 객체가 다르다고 생각하지만 "Upgrade 4.0 to 4.1"문서에서 다루어 진이 질문을 보지 못했습니다.

제 질문은이 작업을하기 위해서 무엇이 필요합니까?

도움을 미리 감사드립니다.

업데이트 : 코드의 일부를 변경했습니다 그것은 더 이상 그 오류를 생성하지 않습니다

ViewPort 
North 
    ... 
West 
    ... 
Center 
    Window 
     Panel 
      Panel 
       Label 
       ... 
      BorderSplitter 
      Panel 
       Label 
       ... 
     Panel 
      List 
South 
    ... 

:

응용 구조를 다음과 같이 보일 것 창을 추가 한 후.

_target.on("beforeRender", function (items) { 
    if (items.length > 0) { 
     _target.add(items); 
     _target.doLayout(); 
     var buttonText = targetParams.ButtonText || _target.title; 
     createToolbarButton(_target.id, buttonText, targetParams.UIConfigurationId); 
    } else { 
     _target.destroy(); 
    } 
}); 
_target.show(); 
_target.toFront(); 

그러나 지금은 _target.add(items);을 호출 할 때 다른 것을 생성합니다.

오류

내가 호출 스택을 분석하는 시도하고이 오류를주는 이유를 발견했습니다

me.container = container.dom ? container : Ext.get(container); 

이 줄에 "속성 'DOM'의 값을 가져올 수 없습니다"입니다. 그것은이 함수를 호출 할 때 : "이"나는 통화 "getRenderTarget()"반환 정의되지 않은 항목을 추가 해요 곳으로, 윈도우의 레이아웃 객체를 참조

renderChildren: function() { 
    var me = this, 
     items = me.getLayoutItems(), 
     target = me.getRenderTarget(); 

    me.renderItems(items, target); 
}, 

. 그런 다음 위에서 언급 한 오류를 던져서 정의되지 않은 dom 속성에 액세스하려고합니다.

여기서 볼 수 있듯이, 창을 만들 때 객체 (aBody)를 renderTo 속성에 전달하기 때문에이 부분이 손실됩니다.

어떤 아이디어 ??

+0

정확한 오류를 알려주세요. 또한 왜 "렌더링"에서 this.show()를 호출합니까? –

+0

오류는 "개체가이 속성 또는 메서드 'renderChildren()'을 지원하지 않습니다."입니다. 그리고 렌더링 내부에 렌더링 할 항목이있는 경우에만 창을 표시합니다. –

+0

이 이벤트 사용 (beforeshow) : http://docs.sencha.com/ext-js/4-1/#!/api/Ext.AbstractComponent-event-beforeshow 원하지 않는 경우 이벤트에서 false를 반환합니다. 창을 표시합니다. –

답변

0

레이아웃과 관련이 있습니다. 레이아웃 'fit'을 사용하면 효과가있는 것 같습니다.