在Extjs 4.2中将值设置为组合框的正确方法是什么?在Extjs 4.2之前,使用以下代码设置具有远程存储的组合框。
var book= Ext.create('Test.model.Book', bookValues);
bookCombo.store.loadRawData([book]);
bookCombo.setValue(book.getId());
bookCombo.setRawValue(book.get('name'));
bookCombo.displayTplData = book.data;
bookCombo.fireEvent('change', bookCombo, book.getId());
但是,自4.2以来,上面的代码没有正确设置远程组合的值。
答案 0 :(得分:1)
首先你必须为商店定义一个Model,然后你可以用一个新的模型实例来设置它。
// model
Ext.define('UserSearchFieldModel', {
extend: 'Ext.data.Model',
fields: [
{name: 'user_id', type: 'string'},
{name: 'displayname', type: 'string'}
]
});
// store
UserSearchField_Store = Ext.create('Ext.data.Store', {
model: 'UserSearchFieldModel',
remoteFilter: true,
proxy: {
type: 'ajax',
url: '...',
reader: {
type: 'json',
root: 'userList'
}
}
});
// field
{
itemId: 'userField',
xtype: 'combo',
queryMode: 'remote',
hideTrigger: true,
store: UserSearchField_Store,
displayField: 'displayname',
valueField: 'user_id'
}
// set a initial value on load
this.down('#userField').setValue(Ext.create('UserSearchFieldModel', {
id: initialUser.id,
displayname: initialUser.name
}));
答案 1 :(得分:0)
我认为在加载数据bookCombo.setValue(book.getId());
之下应该足以设置组合中的值。一旦设置了值,change事件就会自动触发。调用setValue
我认为你自己打电话把它搞乱了。