商店在另一个函数中使用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'}
])
});
答案 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
})
]
});
});