将组件绘制到容器中

时间:2013-03-04 04:56:36

标签: extjs sencha-touch sencha-touch-2

我试图在点击事件时将一个组件绘制到一个容器上,它似乎绘制除了它在容器上不可见之外。这是进一步澄清的代码。

Ext.define("TapCheck.view.NewTap",{
  extend: 'Ext.Container',
  fullscreen: true,
  id: 'tappy',
    initialize: function() {
      this.callParent(arguments);
      var padElement = Ext.get('tappy');
      padElement.on(['tap'],
      'onTouchPadEvent', this);
  },
  config: {
      flex: 1,
      margin: 10,
      layout: {
          type: 'vbox',
          pack: 'center',
          align: 'stretch'
      },
      items: [
          {
              html: 'Touch here!'
          }
      ]
      },
          onTouchPadEvent: function(e, target, options, eventController) {
                         var component = new Ext.draw.Component({
                                items: [{
                                  type: 'ellipse',
                                  cx: 100,
                                  cy: 100,
                                  rx: 40,
                                  ry: 25,
                                  fillStyle: 'blue'
                                }]
                              });
      console.log('X: ' + e.getPageX() + ' Y: ' + e.getPageY());
     Ext.getCmp('tappy').add([component]);
  }
});

请让我知道我错在哪里或者甚至可以做到这一点?

1 个答案:

答案 0 :(得分:0)

我已经更新了一些代码。最大的变化是:

  • 删除了id个配置。不要经常使用它,特别是在定义组件时。
  • initialize& onTouchPadEvent函数仅使用this引用该组件。
  • 使用Ext.create功能创建组件。

试试这个:

Ext.define("TapCheck.view.NewTap",{
    extend: 'Ext.Container',
    fullscreen: true,
    initialize: function() {
        var me = this;
        me.callParent(arguments);
        me.on('tap', me.onTouchPadEvent, this);
    },
    config: {
        flex: 1,
        margin: 10,
        layout: {
            type: 'vbox',
            pack: 'center',
            align: 'stretch'
        },
        items: [{
            html: 'Touch here!'
        }]
    },
    onTouchPadEvent: function(e, target, options, eventController) {
        var component = Ext.create('Ext.draw.Component',{
            items: [{
                type: 'ellipse',
                cx: 100,
                cy: 100,
                rx: 40,
                ry: 25,
                fillStyle: 'blue'
            }]
        });
        console.log('X: ' + e.getPageX() + ' Y: ' + e.getPageY());
        this.add(component);
    }
});