在组合框

时间:2015-05-13 14:30:50

标签: javascript extjs combobox scope

远程商店有一个非常奇怪的问题,如下所示:

存储

Ext.define('freetextOrder.store.Attachment', {
    extend: 'Ext.data.Store',
    model: 'freetextOrder.model.Attachment',
    autoLoad: false,
    proxy: {
        actionMethods: {
            create: "POST",
            read: "POST",
            update: "POST",
            destroy: "POST"
        },
        type: 'ajax',
        filterParam: 'filter',
        remoteFilter: true,
        autoSync: true,
        api: {
            read: 'ajax/Attachment/Cartarticle/Init',
            update: 'ajax/Attachment/Cartarticle/Update',
            create: 'ajax/Attachment/Cartarticle/Create',
            destroy: 'ajax/Attachment/Cartarticle/Destroy'
        },
        reader: {
            type: 'json',
            root: 'results',
            successProperty: 'success'
        },
        writer: {
            type: 'json',
            allowSingle: false
        },
        extraParams: {sid: config.sid}
    },
    listeners: {
        datachanged: function (store) {

            if (Ext.getCmp('attachmentGrid'))
                if (store.getCount() > 0) {
                    Ext.getCmp('attachmentGrid').show(); 
                } else {
                    Ext.getCmp('attachmentGrid').hide();
                }
        }
    }
});

模型:

Ext.define('freetextOrder.model.Attachment', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'id', type: 'int'},
        {name: 'cartarticle_id', type: 'int'},
        {name: 'orig_filename', type: 'string'},
        {name: 'upload_time', type: 'date'}
    ]

});

我的任务不可能,从商店加载过滤器:

 {
            xtype: 'combobox',
            queryMode: 'local',
            mode: 'local',
            fieldLabel: 'template',
            id: 'attachmentTemplate',
            name: 'test',
            store: Ext.create('freetextOrder.store.Attachment'),
            valueField: 'cartarticle_id',
            displayField: 'orig_filename',
            lazyInit: false,
            editable: true,
            invalidCls: '',
            listeners: {
                afterrender: function () {
                    var combo = Ext.getCmp('attachmentTemplate')

                    combo.getStore().clearFilter(true);
                    combo.getStore().addFilter({property: 'id', value: config.options.attTemplateIds});
                    combo.getStore().load();

                    console.log(combo.getStore().getById(49));
                }
            }
        }

问题是我试图使用的事件,我尝试了所有的东西,使该死的东西加载商店元素,但它只是不会让步。

console.log(combo.getStore()。getById(49));返回一个对象,以便加载商店。但是它没有加载到它自己的组合框的选项中....

WIERD PART IS:

当我转到页面并执行chrome命令提示符中的代码时:

                 var combo = Ext.getCmp('attachmentTemplate')

                    combo.getStore().clearFilter(true);
                    combo.getStore().addFilter({property: 'id', value: config.options.attTemplateIds});
                    combo.getStore().load();

加载选项。我在绳子的尽头。我必须通过config.options.attTemplateIds过滤器。这是唯一的要求。并且该值仅在定义了xtype:'combobox'的情况下可用。

对于白痴的缘故,我甚至尝试了围绕元素的最破解选项setTimeout ......仍然没有...真的很奇怪的行为。

2 个答案:

答案 0 :(得分:0)

有两件事或事件:第一件是组合的afterRender,第二件是商店的负载;

combo.getStore()。getById(49)必须在第二个事件之后使用;但你把它放在组合的afterRender中,而商店的数据可能还没有!

答案 1 :(得分:0)

因为我在一年之后陷入了这个问题并且浪费了4小时试图让它工作,没有成功..并且在我记得解决方法之后..我发布给其他人使用。

您可以使用额外参数进行过滤。只需做这样的事情

    var store = Ext.getStore('xxxx');
    store.getProxy().setExtraParam("xxx", newValue);
    store.load();