在表单面板中销毁方法

时间:2014-06-26 03:05:05

标签: sencha-touch destroy formpanel

我使用Cordova API捕获地理位置,然后成功,我在Google地图上渲染当前位置。

当我第一次使用get_position时,我按如下方式渲染表单:

var geo_panel = new Ext.form.Panel({
            useCurrentLocation: true,
            fullscreen: true,
            layout: 'fit',
            items: obj
        });

其中obj是定义为

的工具栏
toolbar = Ext.create('Ext.Toolbar', {
                docked: 'top',
                alias : 'widget.geolocationToolbar',
                ui: 'light',
                defaults: {
                    iconMask: true
                },
                items: [
                    {
                        xtype: 'button',
                        ui: 'back',
                        text: 'Back',
                        // destroy form.Panel overlay and return to tree store view
                        handler: function() {
                            geo_panel.destroy();
                        }
                    },
                    {
                        xtype: 'button',
                        itemId: 'stopWatch',
                        text: 'StopWatch',
                        iconCls: 'arrow_right',
                        iconMask: true,
                        handler: function() {
                            EvaluateIt.utils.UtilityService.clear_watch();
                        }
                    },
                    {
                        xtype: 'selectfield',
                        itemId: 'accuracy',
                        autoSelect: false,
                        placeHolder: 'accuracy',
                        options: [
                            {text: ''},
                            {text: 'high',  value: 5},
                            {text: 'med high',  value: 10},
                            {text: 'medium',  value: 15},
                            {text: 'med low',  value: 20},
                            {text: 'low',  value: 66}
                        ],
                        listeners: {
                            change: function(field, value) {
                                if (value instanceof Ext.data.Model) {
                                    value = value.get(field.getValueField());
                                }
                                console.log(value);
                                // set accuracy as config variable
                                EvaluateIt.config.accuracy = value;
                            }
                        }
                    },
                    {
                        iconCls: 'home',
                        handler: function() {
                            google_map.getMap().panTo(position);
                        }
                    }
                ]
            });

这在我的表单面板中渲染得很好。

我的onSuccess方法然后传递一个参数,将google_map添加到geo_panel表单面板。 我已经尝试过geo_panel.add(工具栏,google_map),这有效,但是当我点击" Back"上面工具栏中的按钮:

{
    xtype: 'button',
    ui: 'back',
    text: 'Back',
    // destroy form.Panel overlay and return to tree store view
    handler: function() {
        geo_panel.destroy();
    }
},

我必须点击两次:第一次销毁google_map,然后第二次销毁工具栏。这是一种非常不良的行为。我已经尝试销毁geo_panel中的每个项目,但这会做其他奇怪的事情。这就像有多个geo_panel实例。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我明白了:我正在创建我的geo_panel的两个实例。我重构了代码,现在一切都按照需要运行。