2011-12-19 11 views
2

にこのコードは、ExtJSに4.0.2a で作業していないが、4.1に変換するとき、それはもはや、エラーが動作し、与えパネルドラッグ&ドロップは、ExtJSに4.1

Uncaught TypeError: Cannot call method 'query' of undefined

Ext.onReady(function() { 

    var panel = new Ext.Panel({ 
     renderTo: divtag, 
     draggable: { 
      insertProxy: false, 
      onDrag: function(e) { 
       var el = this.proxy.getEl(); 
       this.x = el.getLeft(true); 
       this.y = el.getTop(true); 
      }, 
      endDrag: function(e) { 
       this.panel.setPosition(this.x, this.y); 
      } 
     }, 
     title: 'Panel', 
     width: 200, 
     height: 100, 
     x: 20, 
     y: 20 
    }); 
}); 
+0

I、コンポーネントではなく、パネルが正常に動作:(とエラーをスローするコード次の試み:キャッチされない例外TypeError:オブジェクト[オブジェクトのオブジェクト] \t新しいない方法「ensureAttachedToBody」 'Ext.onReady(関数(){ありませんExt.Component({ \t \t制約:真、 \t \tタイトル: 'テスト'、 \t \tフローティング:真、 \t \tスタイル:{ \t \t \tのbackgroundColor: '#FFF' \t \t \t境界 '1ピクセルベタ黒' \t \t}、 \t \t HTML: '表題

コンテンツ

' \t \tドラッグ:{ \t \t \t \t \t \tデリゲート:this.body \t \t} \t})を表示();。 }); ' – Shruti

答えて

3

明らかにこのバージョンのExtにはバグがあります。それは文句を言わないあなたは、このようなパネルのデフォルトD'n'Dをしようとした場合でも動作します。私はあなたがそれを望むように動作するようにコードにパッチを適用するメナージュ

Ext.onReady(function() { 
    var panel = new Ext.Panel({ 
     renderTo: 'divtag', 
     draggable: true, 
     title: 'Panel', 
     width: 200, 
     height:100, 
     x: 20, 
     y: 20 
    }); //panel.show(); }); 
}); 

、このコードは動作するはずです:

Ext.onReady(function() { 
    var panel = new Ext.Panel({ 
     renderTo: 'divtag', 
     draggable: { 
      insertProxy: false, 
      onDrag: function(e) { 
       var el = this.proxy.getEl(); 
       this.x = el.getX(); 
       this.y = el.getY(); 
      }, 
      endDrag: function(e) { 
       panel.setPosition(this.x,this.y); 
      }, 
      alignElWithMouse: function() { 
       panel.dd.superclass.superclass.alignElWithMouse.apply(panel.dd, arguments); 
       this.proxy.sync(); 
      } 
     }, 
     title: 'Panel', 
     width: 200, 
     height:100, 
     x: 20, 
     y: 20 
    }); //panel.show(); }); 
}); 

あなたが使用できるパネルに独自のDDを定義することができ、さらに優れたExtが既に定義済みであるため、ExtパネルをオーバーライドしてデフォルトのExt.util.ComponentDraggerを使用することができるので、 、またはコードで、私はあなたにこれを行うよう助言します:

Ext.override(Ext.panel.Panel, { 
    initDraggable: function() { 
     var me = this, 
      ddConfig; 

     if (!me.header) { 
      me.updateHeader(true); 
     } 

     if (me.header) { 
      ddConfig = Ext.applyIf({ 
       el: me.el, 
       delegate: '#' + me.header.id 
      }, me.draggable); 

      // Add extra configs if Window is specified to be constrained 
      if (me.constrain || me.constrainHeader) { 
       ddConfig.constrain = me.constrain; 
       ddConfig.constrainDelegate = me.constrainHeader; 
       ddConfig.constrainTo = me.constrainTo || me.container; 
      } 

      me.dd = Ext.create('Ext.util.ComponentDragger', this, ddConfig); 
      me.relayEvents(me.dd, ['dragstart', 'drag', 'dragend']); 
     } 
    } 
}); 
var panel = Ext.create('Ext.panel.Panel', { 
    id: 'test', 
    renderTo: 'divtag', 
    draggable: true, 
    floating: true, 
    title: 'Panel', 
    width: 200, 
    height:100, 
    x: 20, 
    y: 20 
}); 

initDraggableのコードは、現在の安定版のExt.window.Window.initDraggableメソッドから取得しました。

+0

完全に正常に動作のthnx ... – Shruti

+0

私は助けることがうれしい:) – sbgoran

2

が動作していない私がいましたあなたはrenderTo要素のidの周りに引用符を追加する必要があり、同様に:それは4.1で動作させることができ、それはuの探していた引用符なし

renderTo : 'divtag', 

divtagという名前の変数が定義されています。

私はそれを実行した後もエラーはなく、次にpanel.show()をレンダリングしました。

+0

私が言ったようにコードを試しました...ここにあるが、それでも同じエラーを示しています 'Ext.onReady(関数(){ VARパネル=新しいExt.Panel({ \t renderTo: 'divtag'、 ドラッグ可能:{ insertProxy:偽、 onDrag:機能(E){ \tにconsole.log(この); VAR EL = this.proxy.getEl(); \t this.x = el.getX(); this.y = el.getY(); \t }、 endDrag:function(e){ \t panel.setPosition(this.x、this.y); } }、 タイトル: 'パネル'、 幅:200、 高さ:100、 x:20、 y:20 }); }); ' – Shruti

+0

Gotcha - divタグの引用符のような音は問題でしたが、*ここでは問題ではありませんでした。選ばれた答えがうまくいくのを見てうれしい。 –

0

ちょっとした提案:ウィンドウコンポーネントは、フローティングミックスインを持つ特別なパネルです。必要なものだけかもしれません。

+0

thnx @ dmitry..the probはウィンドウがタイトル/ヘッダーからドラッグできるようにしています.iは本体からウィンドウをドラッグできません。それがextjs 4.0.2aで動作していることを記述している場合は、本体からパネルをドラッグできます... – Shruti

+0

あなたのHTMLに定義されているdivタグがありますか? ' ます。

' – Shruti

関連する問題