Model view controller 通过直接存储加载ExtJS 4 MVC组合框-单击组合框时如何防止加载?

Model view controller 通过直接存储加载ExtJS 4 MVC组合框-单击组合框时如何防止加载?,model-view-controller,extjs,combobox,store,Model View Controller,Extjs,Combobox,Store,我在视图中有一个组合框,它绑定到一个数据存储/模型,该数据存储/模型使用Ext.Direct加载下拉列表中的数据 在我打开包含组合框的视图的控制器中,我开始加载存储 这一切都是可行的,但当我点击组合框时,它会启动另一个加载(用加载屏蔽屏幕)并重新加载商店。我需要防止第二次加载,因为它已经加载了 商店: Ext.define('ESDB.store.Employees', { extend: 'Ext.data.Store', model: 'ESDB.model.Employee

我在视图中有一个组合框,它绑定到一个数据存储/模型,该数据存储/模型使用Ext.Direct加载下拉列表中的数据

在我打开包含组合框的视图的控制器中,我开始加载存储

这一切都是可行的,但当我点击组合框时,它会启动另一个加载(用加载屏蔽屏幕)并重新加载商店。我需要防止第二次加载,因为它已经加载了

商店:

Ext.define('ESDB.store.Employees', {
    extend: 'Ext.data.Store',
    model: 'ESDB.model.Employee',
    autoLoad:false,
    proxy: {
        type: 'direct',
        api: {
            create  : undefined,
            read    : EmployeeService.getRecords,
            update  : EmployeeService.setRecord,
            destroy : undefined
        }

    }
});
型号:

Ext.define('ESDB.model.Employee', {
    extend: 'Ext.data.Model',
    fields: ['id','name','login','pw','domain','lastLogin','addedDate','active','ulevel','staffID']
});
视图:

(相关部分-组合框-视图中没有对商店或模型的其他引用)

控制器(当他们双击网格中的一行时,将启动员工存储的加载,然后打开视图):


所有这些代码都可以工作,但是当我进入视图时,组合框正确地显示了一个加载的值,我单击组合框,它会启动存储的另一个加载。它可以工作,但我必须再次单击以实际选择不同的值。因此,我正在寻找一种方法来告诉combobox只使用存储,而不是加载它——似乎它应该已经知道它已加载并简单地使用它了?

您需要为combobox设置
查询模式:“local”
。正如您在文档中看到的,默认值是(顺便说一句,您应该删除模式:'remote',模式不是组合框的有效配置)

在queryMode:“remote”中,组合框根据用户交互动态加载其存储


您应该使用“local”,因为您已经在存储中使用了localy数据

是的,这是有道理的,我在发布后的文档中发现了这一点,并将代码更改为queryMode:“local”,没有区别。当我点击组合框时,它会很快显示一个“加载…”掩码,并且不会弹出选项列表。我必须再点击一次。好吧,这太疯狂了,但现在它开始工作了。我不确定它是否关闭了我的浏览器标签或缓存问题,但它看起来像是queryMode:“local”起作用了,谢谢。确实有道理。文档并不总是那么清晰。我以为store.autoLoad实际上是用来防止这种情况发生的属性。。。
this.items = [
                {
                xtype: 'form',
                items: [
{
                        xtype: 'combobox',
                        name : 'callTakenBy',
                        fieldLabel: 'Taken By',
                        displayField: 'name',
                        queryMode: 'remote',
                        valueField: 'id',
                        store: "Employees",
                        editable: false
                    }
]]}
encounterRowClicked: function(grid, record) {
            console.log('Double clicked on ' + record.get('id'));

            var store = this.getEmployeesStore();
                store.load({
                    params: {
                    },
                    callback: function(r,options,success) {  } //callback
                }); //store.load


            // load the view:

            var view = Ext.widget('encounteredit');
            view.down('form').loadRecord(record);

        }