コードは次のとおりです:
{
xtype:"grid",
title:"Product BOM",
layout:"fit",
store:store,
enableDragDrop: false,
border: false、
frame:false、
autoScroll:true、plugins:[editor]、
sm:sm、
height:340、
clicksToEdit:2、
autoWidth: true,
viewConfig:{forceFit:true,autoFill:true,markDirty:false}
}
次に、gridpanel の列定義を見てみましょう。コンポジットがどのように使用されているかを見ることができます
columns: [{
header: "マテリアル名/モデル",
dataIndex: "モデル",
width: 200,
menuDisabled: true,
editor:
{
//定義エディター
xtype: "compositefield",
name: "compositefield",
items:[
{
xtype: "combo " 、
mode: "local"、
name: "sets"、
width:80、
fieldLabel: "該当する製品ブランド"、
emptyText: "選択してください"、
valueField: "id"、
lazyInit:false、
value:this.data?this.data.title:""、
hiddenName:"setid"、
hiddenValue:this.data? .data.setid:""、
displayField: "title"、
typeAhead: false、
forceSelection: true、
editable:true、
listeners:{
"change " :function(combo,newvalue,oldvalue)
{
//ブランドの変更イベントを処理します。エディターは、以前に定義された roweditor のインスタンスです。
var category=editor .items.items[0].items.items[1];
varmaterial=editor.items.items[0].items.items[2];
var c=category.getValue(); 🎜>var store=material.getStore();
store.load({
params:{setid:newvalue,category:c},
callback:function(r,options,success){
if (成功)
material.setValue("");
}
},
triggerAction: "all",
store: new Ext.data.JsonStore({
url: "<%=script_path%>data.asp",
root: "data",autoDestroy:true,
remoteSort: true,
listeners :{"load":function(store,records,option){
var s=Ext.data.Record.create([{name:"id",type:"int"},{name:"title") ,type:"string"}]);
store.add(new s({id:0,title:"Universal"}))
}},
baseParams: {op: "setList" },
totalProperty: "total",
autoLoad: true,
fields: ["title","id"]
})
},
{
xtype: "combo",
mode:"local",width:60,
name:"category",
fieldLabel: "category",
emptyText:"選択してください",
valueField: "category"、
lazyInit:false、
value:this.data?this.data.category:""、
displayField: "category"、
typeAhead: false,forceSelection : true,
triggerAction: "all",
listeners:{
"change":function(combo,newvalue,oldvalue)
{
// カテゴリの変更イベントを処理します。選択後、ブランディング後、コンボボックスをリロードします。エディターは、以前に定義された roweditor のインスタンスです。
var set=editor.items.items[0].items.items[0]; 0].items.items[2];
var setid=sets.getValue();
store.load({
params:{category: newvalue,setid:setid},
callback:function(r,options,success){
if (success)
material.setValue("")
}
}); 🎜>}
},
store: new Ext.data.JsonStore({
url: "<%=script_path%>data.asp",
root: "data ",autoDestroy:true,
remoteSort: true,
baseParams: {op: "materialCategoryList"},
totalProperty: "total",
autoLoad: true,
fields: ["category "]
})
},
{
xtype: "combo",
forceSelection: true,
editable:true,
mode: "local"、
name:"material"、
fieldLabel: "material"、
emptyText:"マテリアルを選択してください"、
valueField: "id"、
allowBlank:false、
displayField: "model"、
width:250、
lazyInit:false、
typeAhead: false、
triggerAction: "all"、
listeners:{
"change " :function(combo,newvalue,oldvalue)
{
//ここに注意してください! ! !以下の2文がない場合は、選択後も表示値が変化せず、「確認」をクリックしても更新できないことがわかります。なぜ? roweditor は、レコードの isdirty 属性を検出することによって validateedito と afteredit を呼び出すかどうかを決定するため、各列に対応するコントロール値が変更されるかどうかを決定します。材料モデルの列は複合フィールドに対応するため、複合フィールドの値が変更されたときに roweditor が実行するようにする必要があります。 validedit と afteredit を呼び出すと、compositefield の値も呼び出され、列
var comp=editor.items.items[0];
comp.setRawValue(combo .getRawValue());
}
},
store: new Ext.data.JsonStore({
url: "<%=script_path%>data.asp",
root: " data",autoDestroy:true,
remoteSort: true,
baseParams: {op: "materialList"},
totalProperty: "total",
autoLoad: false,
fields: ["モデル","id"]
})}
]
}
},
{
header: "quantity",
dataIndex: "qty"、
width: 50、
menuDisabled: true、
editor: {
xtype: 'numberfield'、
minValue:1、
allowDecimals:false
}
}
,{
header: "color",
dataIndex: "color",
width: 60,
menuDisabled : true
}
,{
header: "サイズ",
dataIndex: "size",
width: 60,
menuDisabled: true
}
]
}
]
このメモをとって、困っている友達と共有したいと思います。