Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在extjs 4.2中使用远程存储设置combobox的值_Extjs_Extjs4_Extjs4.2 - Fatal编程技术网

如何在extjs 4.2中使用远程存储设置combobox的值

如何在extjs 4.2中使用远程存储设置combobox的值,extjs,extjs4,extjs4.2,Extjs,Extjs4,Extjs4.2,在Extjs 4.2中,为组合框设置值的正确方法是什么。在extjs4.2之前,带有远程存储的组合框是使用以下代码设置的 var book= Ext.create('Test.model.Book', bookValues); bookCombo.store.loadRawData([book]); bookCombo.setValue(book.getId()); bookCombo.setRawValue(book.get('name')); bookCombo.displayTplData

在Extjs 4.2中,为组合框设置值的正确方法是什么。在extjs4.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开始,上面的代码没有正确设置远程组合的值。

我认为加载数据
bookCombo.setValue(book.getId())
应该足以设置组合中的值。设置值后,更改事件应立即自动触发。调用
setValue


我想你自己打电话把事情搞砸了。

这让我发疯,但最后我找到了解决办法

首先,您必须为商店定义一个模型,然后可以使用新的模型实例设置该值

// 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
    }));

它如何不设置值?田地还是空的?它显示的是id而不是名称?或者它一开始工作,然后在展开组合框时丢失值?在4.2之前,它通常在没有loadRawData行的情况下工作。我想知道4.2之后是否需要加载数据和设置值?这是否是正确的方法。这不是一个容易的问题,事实上。。。通常的方法是等待组合存储加载后再显示它(参见示例)。但是你的也很有趣。。。你如何得到你想在商店里装入的图书型号?您的combo商店应该提前加载吗?它是远程的吗?存储是远程的,在编辑表单时,需要从数据中设置值。在Ext JS的代码中,您看到存储加载是由组合框上的
setValue
调用触发的吗@克里斯蒂安·威斯特贝克一点也不。答案针对op的示例代码,只意味着他在调用
setVale()
后不需要调用任何东西。。。加载发生在这里
bookCombo.store.loadRawData([book])