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