Javascript 带有可选参数的组合框渲染

Javascript 带有可选参数的组合框渲染,javascript,extjs,Javascript,Extjs,我正在解决一个可以简化为以下内容的需求。我是Ext.js的新手,我需要帮助实现以下目标 我有如下4张桌子 因此,我有3000家公司和9000名用户分布在不同的公司。我需要为网格中的每个公司映射版主 我有一个添加按钮,它在网格中添加一行 我实现了在网格的第一列显示公司。容易的。所以用户可以选择一个 我实现了在网格的第二列中显示属于该公司的用户。仅供参考,用户可以在此多选版主 问题: 此时,当我添加新行、选择新公司时,companyusers存储将刷新,因此,在第一行中选择的值不再是有效值,并且第

我正在解决一个可以简化为以下内容的需求。我是Ext.js的新手,我需要帮助实现以下目标

我有如下4张桌子

因此,我有3000家公司和9000名用户分布在不同的公司。我需要为网格中的每个公司映射版主

我有一个添加按钮,它在网格中添加一行

我实现了在网格的第一列显示公司。容易的。所以用户可以选择一个

我实现了在网格的第二列中显示属于该公司的用户。仅供参考,用户可以在此多选版主

问题: 此时,当我添加新行、选择新公司时,companyusers存储将刷新,因此,在第一行中选择的值不再是有效值,并且第一行的用户列显示空文本(或仅显示id)

我的模型如下

Ext.define('Mine.CompanyModel', {
    extend: 'Ext.data.Model',
    fields: ['Id', {name: 'Name', type:'string'}]});

Ext.define('Mine.UsersModel', {
    extend: 'Ext.data.Model',
    fields: ['Id', {name: 'Name', type:'string'}]});

Ext.define('Mine.CompanyUsersModel', {
    extend: 'Ext.data.Model',
    fields: ['company_user_id', 'UserName']}); //<companyuser Id>

Ext.define('Mine.CompanyModeratorModel', {
    extend: 'Ext.data.Model',
    fields: ['Id', 'CompanyUserId']});
我的网格列是

{
     text: 'Company', width: '10%', dataIndex: 'id',
     renderer: companyRenderer(combo_company), editor: combo_company
 },
 {
     text: 'Users', width: '16%', dataIndex: 'company_user_id',
     renderer: companyUsersRenderer(companyUsersCbo), editor: companyUsersCbo
 }
我的编辑是

var companyUsersCbo = Ext.create('Ext.form.ComboBox', {
             xtype: 'combo',
             id: 'company_users',
             name: 'company_users',
             valueField: 'Id',
             displayField: 'name',
             allowBlank: false,
             store: 'Mine.CompanyUsersStore',
             multiSelect: false,
             editable: true,
             queryMode: 'local',
             pickerAlign: 'bl',
             listConfig: {
                 getInnerTpl: function (display) {
                     return '<div class="x-combo-list-item"><img src="' + Ext.BLANK_IMAGE_URL + '" class="chkCombo-default-icon chkCombo" /> {' + display + '} </div>';
                 }
             }
             listeners: {
                 expand: function () {
                     var mainGrid = Ext.getCmp('mygrid');
                     var selmodel = mainGrid.getSelectionModel();
                     var record = selmodel.getSelection();
                     if (record[0].get('id') != null) {
                         this.getStore().getProxy().setExtraParam('company_id', record[0].get('id')); // am storing the company id in a model
                         this.getStore().load();
                     }
                 }
             }
        });
var companyUsersCbo=Ext.create('Ext.form.ComboBox'{
xtype:'组合',
id:'公司\用户',
名称:'公司\用户',
valueField:'Id',
displayField:'名称',
allowBlank:false,
商店:“我的。公司商店”,
多选:错,
是的,
queryMode:'本地',
pickerAlign:'bl',
列表配置:{
getInnerTpl:函数(显示){
返回{'+display+'}';
}
}
听众:{
展开:函数(){
var mainGrid=Ext.getCmp('mygrid');
var selmodel=mainGrid.getSelectionModel();
var record=selmodel.getSelection();
if(记录[0]。get('id')!=null){
this.getStore().getProxy().setExtraParam('company_id',record[0].get('id');//我正在模型中存储公司id
这个.getStore().load();
}
}
}
});
我的渲染器是

        var companyUsersRenderer = function (combo) {
        return function (resources) {
             var result = [];
             resources = resources || [];
             for (var idx = 0, len = resources.length; idx < len; idx++) {
                 var value = combo.getStore().find(combo.valueField, resources[idx]);
                 if (value != -1) {
                     var rec = combo.getStore().getAt(value);
                     result.push(rec.get(combo.displayField));
                 }
             }
             return result.join(', ');
         }
    }
var companyUsersRenderer=函数(组合){
返回函数(资源){
var结果=[];
资源=资源| |[];
for(var idx=0,len=resources.length;idx
我错过了什么?我应该怎样做才能使组合框中显示的值(名称)保持独立于下一行

我尝试了什么::我添加了一个单独的隐藏列,并将其设置为名称,添加到记录中。它工作得很好,但不是正确的方法。此外,当我双击单元格进行编辑时,它会显示数字(id而不是文本),但在我展开后,它会显示文本。

naga Sandeep, 尝试使用URL发送参数以获取筛选记录

like,
url:'someThing/abc/1435'+'id='+record.id;

filter your store accordingly.

问题是当网格被渲染时,列被渲染,渲染函数使用组合存储的最后状态


我会在CompanyUsersModel中添加一个显示字段,然后在选择公司时填充它。另外,我将放弃渲染器功能。

widgetcolumns是在网格内使用其他组件(如combo)的标准方式。尝试使用它们:请提供jsfiddleAs@avinash示例,一个可用的提琴或代码片段将有助于理解问题。我有两个问题,为什么要在expand上重新加载网格存储而不是组合存储,为什么要在
CompanyStore
和“CompanyStore”中使用相同的
CompanyModel
。嗨@ankitchaudhary,1)我正在重新加载组合存储。检查过了。在本例中,范围是指组合框。2)这只是一个打字错误。它必须是UserStore的UserModel。问题是,每一行都有自己的filterring,因此也有记录。对第二行进行筛选后,第一行不显示其记录。
like,
url:'someThing/abc/1435'+'id='+record.id;

filter your store accordingly.