从自动完成中选择项目后如何填充 Ext.js 4 网格面板单元格?

Posted

技术标签:

【中文标题】从自动完成中选择项目后如何填充 Ext.js 4 网格面板单元格?【英文标题】:How to populate Ext.js 4 grid panel cell after selecting item from autocomplete? 【发布时间】:2011-08-08 09:12:06 【问题描述】:

我有点不确定如何执行以下操作:

我有一个网格面板,在其中一个字段上,我有一个自动完成功能,我的应用程序的这一部分工作正常。

我想做的是: 从自动完成列表中选择一个项目后,我想填充与该项目关联的“描述”数据并将其填充到相应的单元格中。

例如,“PartNum 3”返回的数据是:

"PartNum":"PartNum 3","Description":"Description partnum 3"

选择后,我希望在网格面板的“描述”单元格中更新“描述部分 3”。

现在,我有点困惑的是,最好的方法是什么。第一种方法似乎是这里How to read and set a value of a specific cell in an ExtJS Grid? 解释的“DOM”模型。另一种方法似乎更像是“存储”解决方案,例如Update or Reload Store of ExtJs ComboBox

所以我的问题是我应该使用哪种方法,为什么?特别是,我想知道在后端执行添加操作时最好的方法是什么。

适用于 Gridpanel 和自动完成的“Store”方法的一些代码也非常受欢迎。

就目前的代码而言,这是我的模型:

Ext.define('CustomerOrderLineGrid.model.COLInventoryPart', 
extend: 'Ext.data.Model'
, fields: ['Id', 'PartNum', 'Description']
, proxy: 
    type: 'ajax'
    , api: 
        read: '../InventoryPart/InventoryPartListAutoComplete'
          
    //        , url: 'someUrl'
    , extraParams:
    
        total: 50000
    
    , reader: 
        type: 'json'
        , root: 'InventoryParts'
        , successProperty: 'success'
        , totalProperty: 'total'
    
    , simpleSortMode: true

);

商店是:

Ext.define('CustomerOrderLineGrid.store.COLInventoryParts', 
extend: 'Ext.data.Store',
model: 'CustomerOrderLineGrid.model.COLInventoryPart',
autoLoad: false
, pageSize: 200
, remoteSort: true
, remoteFilter: true
, buffered: true
, sorters: [
    property: 'PartNum'
    , direction: 'ASC'
]

);

部分视图是:

, editor: 
                xtype: 'combo'
                , store: 'COLInventoryParts'
                , displayField: 'PartNum'
                , typeAhead: true
                , width: 320
                , hideTrigger: true
                , minChars: 2
                , listeners:
                
                    select: function (f, r, i) 
                       // CODE TO INSERT TO POPULATE DESCRIPTION FIELD
                    
                
            

【问题讨论】:

【参考方案1】:

请注意,您提供的链接是针对 extjs 的,而您使用的是 extjs4

我认为您最好的选择是在网格上侦听编辑事件,如果编辑在自动完成列上,则在描述一列上设置值,这将是这样的:

...你的网格定义...

listeners: 
    edit: function(editor, e) 
              if(e.field === 'PartNum') 
                  //NOTE: You need a reference to the autocomplete store for this to work
                  var rec = store.findRecord('PartNum', e.value);
                  e.record.set('Description', rec.get('Description'));
              
          

...其余代码...

这假设您可以获得对自动完成正在使用的商店的引用,如果您现在没有它应该相当容易。

这应该让你开始。

【讨论】:

以上是关于从自动完成中选择项目后如何填充 Ext.js 4 网格面板单元格?的主要内容,如果未能解决你的问题,请参考以下文章

MVC 4,选择自动完成值时如何填充 3 个文本框?

下拉选择后自动填充文本字段

Laravel-从下拉列表中选择值后自动填充输入

如何从视图中触发事件(自定义事件)并在 Ext JS 的控制器中处理它们?

如何在 Ext Js 中自动选择(显示)组合框的第一个值?

Ext js 编辑器网格禁用多行选择