存储对combobox和bindStore的过滤

时间:2015-01-06 07:27:42

标签: javascript extjs ext3

商店在另一个函数中使用bindStore绑定到组合框。

一切正常 - 除了我需要根据给定的参数过滤该函数中的数据。

  loadMarkers: function(store, value){

    store.filter('markerid',17);

    this.fields.marker.bindStore(store);
    this.fields.marker.setValue(value);
  }

这个具体的例子有两种不同的尝试方式 - 在绑定之前和之后。最后的Console.log显示了'store'甚至组合框的过滤商店。但是组合框本身仍能显示出一切。

组合框配置:

  marker: new Ext.form.ComboBox({
    fieldLabel: _('Marker'),
    displayField: 'name',
    valueField: 'id',
    mode:'local',
    lastQuery: '',
    store: new Ext.data.JsonStore({
      fields: ['name', 'id', 'markerid'],
      data: [
        {name:_('Default'), id: 0, markerid: 0}
      ]
    })
   })

this.markerStore = new Ext.data.JsonStore({
  autoLoad: true,
  url: 'Api/getMarkers',
  root: 'response',
  sortInfo: {field: 'name', direction: 'ASC'},
  fields: Ext.data.Record.create([
    {name: 'id', type: 'integer'},
    {name: 'name', type: 'string'},
    {name: 'markerid', type: 'integer'}
  ])
});

1 个答案:

答案 0 :(得分:1)

由于上述代码的格式,我假设你使用ExtJs 3.4作为这个答案。

我试图直接运行你的代码并遇到了一些错误。例如_('Default') _() is undefined以及我在文档中看到的ComboBox没有一个名为bindStore ComboBox Documation的函数。

我已将代码重写为以下代码,它对我来说很好。您需要确保在商店加载数据后应用过滤器,在我的示例中,我等待加载事件被触发。

Ext.onReady(function() {

    Ext.BLANK_IMAGE_URL = '/js/ext-3.4.0/resources/images/default/s.gif';

    var markerStore = new Ext.data.JsonStore({
        autoLoad: true,
        url: 'data/data1.json',
        root: 'rows',
        sortInfo: {field: 'name', direction: 'ASC'},
        fields: [
            {name: 'id', type: 'integer'},
            {name: 'name', type: 'string'},
            {name: 'markerid', type: 'integer'}
        ],
        listeners: {
            'load': function() {
                Ext.getCmp('createformTypeCombo').getStore().filter('markerid', 17);
            }
        }
    });


    var form = new Ext.form.FormPanel({
        renderTo: Ext.getBody(),
        items: [
            new Ext.form.Label({
                text: "form",
                margin: "25 10 25 5"
            }),
            new Ext.form.ComboBox({
                fieldLabel: 'Marker',
                id: 'createformTypeCombo',
                displayField: 'name',
                valueField: 'id',
                mode:'local',
                lastQuery: '',
                store: markerStore
            })
        ]
    });
});