如何从ExtJS中的map事件触发viewcontrol中的函数?

时间:2015-05-29 18:07:35

标签: extjs

我有带有openlayers地图的MVVM应用程序。 在地图上做特定事件时(比如完成平局)我想激活extjs网格的“添加”事件。

我尝试过使用viewcontroller MyApp.app.getController('itemsController')但我收到错误:

  

无法识别的班级名称/别名:App.controller.itemsController

如何调用网格项的viewcontroller方法或fire事件来开始向网格添加项目?

    Ext.define('App.view.grids.ItemsViewController', {
    extend: 'Ext.app.ViewController',
    alias: 'controller.itemsController',    
    onNewClick: function (button, evt) {        
        var newItem = Ext.create('App.model.items.Item', {
            id:'',
            name:''            
        });
        this.isNewRecord = true;
        this.newRecordId = newEvent.get('id');
        var grid = this.lookupReference('itemsgrid');
        grid.getStore().insert(0, newEvent);
        grid.getPlugin('itemsRowEditingPlugin').startEdit(newEvent);
    }
});

查看定义:

Ext.define('App.view.grids.ItemsGrid', {
    extend: 'Ext.panel.Panel',
    alias: 'widget.items',
    xtype: 'itemsGrid',
    reference: 'items',
    requires: [
        'App.view.grids.ItemsViewController',
        'App.view.grids.ItemsViewModel2'
    ],
    viewModel: {
        type: 'itemsViewModel'
    },
    controller: 'itemsController',
    session: true,
    width: '100%',
    height: 500,
    layout: {
        type: 'vbox',
        align: 'stretch'
    },
    items: [
        {
            xtype: 'grid',
            itemId: 'itemsgrid',
            reference: 'itemsgrid',
            width: '100%',
            title: 'Items',
            flex: 5,
            height: 350,
            maxHeight: 350,
            scrollable: 'y',
            header: true,
            viewConfig: {
                stripeRows: true
            },            
            bind:{
             store: '{itemsStore}'
             },
            columns: [
                {
                    dataIndex: 'id',
                    text: 'id'
                    //,hidden: true
                },
                {
                    dataIndex: 'hours',
                    text: 'Hours',
                    editor: {
                        xtype: 'numberfield',
                        minValue: 1,
                        allowBlank: false
                    }
                },
                {
                    dataIndex: 'address',
                    text: 'Address',
                    flex: 1,
                    editor: {
                        xtype: 'textfield',
                        allowBlank: false
                    }
                },
                {
                    dataIndex: 'name',
                    text: 'Name',
                    flex: 1,
                    editor: {
                        xtype: 'textfield',
                        allowBlank: false
                    }
                }
            ],

            selType: 'rowmodel',
            plugins: [
                {
                    ptype: 'rowediting',
                    pluginId: 'itemsRowEditingPlugin',
                    clicksToEdit: 1
                }
            ]
        }]
});

1 个答案:

答案 0 :(得分:1)

尝试像这样访问你的控制器:

Ext.ComponentQuery.query('itemsGrid')[0].getController();