extjs 5 将值设置为具有远程值的组合框时出错

extjs 5 Error while setting value to the combobox with remote values

有带有组合框的表单面板

Ext.define('MyApp.admin.view.UserAddView', {
    extend: 'Ext.form.Panel',
    requires: [
        'MyApp.admin.controller.UserAddViewController'
    ],
    controller: 'userAdd',
    autoScroll: true,
    frame:true,
    items: [{
        xtype:'combobox',
        fieldLabel: 'Roles',
        collapseOnSelect: true,
        editable: false,
        multiSelect: true,
        queryMode: 'remote',
        queryParam: undefined,
        displayField: 'authority',
        bind: {
            store: '{role}'
        },
        name: 'authorities'
    }]
});

然后我想从视图控制器动态地为这个组合框设置值

var ob = {'authorities': 'ROLE_ADMIN_USERS'};
var panelToAddName = Ext.create('MyApp.admin.view.UserAddView', {});
panelToAddName.getForm().setValues(ob);

每次我收到错误

Uncaught TypeError: undefined is not a function

在下一行

panelToAddName.getForm().setValues(ob);

在combobox内部本地指定store就没有这个问题

store: ['ROLE_ADMIN_USERS']

我猜有一个问题与调用 setValue 时未加载远程列表有关,但是设置 queryMode: 'local' 并从视图控制器加载带有列表的存储并不能解决问题。

有没有办法通过从视图控制器远程加载的列表来设置组合框的值?

我认为问题出在您的 comboboxbind 配置上。在 Ext5 文档中,combobox.

没有名称为 bind 的配置

如果您的商店名称是 role,请尝试写 store:'role' 而不是 bind

希望这会奏效。

我终于通过设置

解决了这个问题
queryMode: 'local'

然后从视图控制器加载存储

var storeRole = me.getViewModel().getStore('role');
storeRole.load();

然后组合框的bindStore

var combobox = panelToAddName.items.getAt(0).items.getAt(0).items.getAt(0).items.getAt(2);
combobox.bindStore(storeRole);

如果有人知道如何以更简单的方式获得组合框,欢迎您发表评论。以下没有 bindStore() 方法

Ext.ComponentQuery.query('combobox')[0]