ExtJS は初めてです。
同じページに 2 つのグリッドがあります。最初のグリッドには 3 つの列があります。2番目に1つだけ。問題は、2 番目がレンダリングされると、最初のグリッドのプロパティが上書きされることです。
たとえば、最初のグリッドで行を編集しようとすると、2 番目のグリッドから行の幅が取得されます。
var $booleanArray = [
[「拒否」、「拒否」]、
[「許可」、「許可」]
];
var myPageSize = 10;
Ext.Loader.setConfig({ 有効: true });
Ext.require([
'Ext.grid.*',
'Ext.data.*',
'Ext.util.*',
「Ext.state.*」
]);
Ext.onReady(関数 () {
Ext.define('CharacteristicModel', {
拡張: 'Ext.data.Model',
フィールド: [ {name: 'name'}, {name: 'value'}, {name: 'order'} ],
検証: [
{
タイプ:「長さ」、
フィールド名'、
分: 1
}
]
});
var 特性ストア = 新しい Ext.data.Store({
プロキシー : {
モデル:「CharacteristicModel」、
タイプ:「残り」、
API: {
読み取り: admin_path + '/getCharacteristics/1/',
作成: admin_path + '/saveCharacteristics/1/',
更新: admin_path + '/saveCharacteristics/1/',
破棄: admin_path + '/destroyCharacteristic/1/'
}、
読者 : {
タイプ:「json」、
ルート:「データ」、
合計プロパティ: 'total_count'
}、
ライター: {
タイプ: 'json',
ルート: 'データ'
}、
バッファリング: true
}、
リスナー: {
読み取り: 関数 (応答) {
}、
ロード:関数(ストア){
}、
書き込み: 関数 (格納、操作) {
store.load();
}
}、
pageSize : myPageSize,
autoLoad : { 開始: 0, 制限: myPageSize },
オートシンク: 真
});
var rowEditing = Ext.create('Ext.grid.plugin.RowEditing');
var 特性Grid = 新しい Ext.grid.GridPanel({
id : 'characteristicsGrid',
renderTo : 'characteristics_grid_div_1',
store : 特性ストア、
幅:480、
ステートフル : 真、
stateId : 'characteristicsGrid',
title : 'グリッド "1"',
iconCls : 'アイコンユーザー',
リスナー: {
itemdblclick: 関数 (dv、行、項目、インデックス、e) {
dv.refresh();
dv.getGridColumns()[0].setEditor({
無効: 真、
編集可能: false
});
if (row.data.id == 6 || row.data.id == 7) {
dv.getGridColumns()[1].setEditor({
xtype : 'コンボ',
store : new Ext.data.ArrayStore({
フィールド: ['abbr', 'action'],
データ: $booleanArray
})、
displayField : 'アクション',
valueField : 'abbr',
モード:「ローカル」、
typeAhead : false,
トリガーアクション: 'すべて',
lazyRender : 真、
emptyText : 'アクションを選択'
});
}
そうでなければ (row.data.id == 8 || row.data.id == 11) {
dv.getGridColumns()[1].setEditor({
無効: 真、
編集可能: false
});
}
そうしないと {
dv.getGridColumns()[1].setEditor({
xtype: 'テキストフィールド'
});
}
}
}、
列: [
{
id : '名前',
text : 'アカウントの特徴',
ソート可能 : false,
幅:340、
固定: 真、
dataIndex: '名前'
}、
{
id : '値',
テキスト: '値',
ソート可能 : false,
dataIndex: '値',
幅:70、
固定: 真、
編集者 : {
xtype: 'テキストフィールド'
}、
renderer : 関数 (値、フィールド) {
if (field.record.data.id == 6 || field.record.data.id == 7) {
if ($booleanArray[0][0] != 値) {
値 = $booleanArray[1][1];
}
そうしないと {
値 = $booleanArray[0][1];
}
}
戻り値;
}
}、
{
id : '注文',
text : '注文',
ソート可能 : false,
dataIndex: '注文',
幅:70、
固定: 真、
編集者 : {
xtype: 'テキストフィールド'
}、
renderer : 関数 (値、フィールド) {
戻り値;
}
}
]、
bbar : Ext.create('Ext.PagingToolbar', {
store : 特性ストア、
表示情報: 真、
pageSize : myPageSize,
displayMsg : '{0} - {1} と {2} を表示',
emptyMsg: "0 行"
})、
DockedItems: [
{
xtype: 'ツールバー',
項目: [
{
テキスト : '追加',
iconCls: 'アイコン追加',
ハンドラ: 関数 () {
var grid_colums = rowEditing.cmp.getSelectionModel().view.getGridColumns();
grid_colums[0].setEditor({
xtype : 'コンボ',
store : new Ext.data.ArrayStore({
フィールド: ['id', 'name'],
データ: $characteristics
})、
displayField : '名前',
値フィールド: 'ID',
モード:「ローカル」、
typeAhead : false,
トリガーアクション: 'すべて',
lazyRender : 真、
emptyText : 'アクションを選択'
});
grid_colums[1].setEditor({
xtype: 'テキストフィールド'
});
// 空のレコード
//characteristicsStore.autoSync = false;
特性ストア.挿入(0, 新しいCharacteristicModel());
行編集.startEdit(0, 0);
//characteristicsStore.autoSync = true;
}
}、
'-',
{
itemId : '削除',
text : '削除',
iconCls : 'アイコン削除',
無効: 真、
ハンドラ : 関数 () {
var 選択 = 特性Grid.getView().getSelectionModel().getSelection()[0];
if (選択) {
特性Store.remove(選択);
}
}
}
]
}
]、
プラグイン: [rowEditing]
});
attributesGrid.getSelectionModel().on('selectionchange', function (selModel, selections) {
特性グリッド.ダウン('#delete').setDisabled(selections.length === 0);
});
});
Ext.onReady(関数 () {
Ext.define('AdvantagesModel', {
拡張: 'Ext.data.Model',
田畑: [
{名前: '名前'}
]
});
// 状態プロバイダーをセットアップします。すべての状態情報は Cookie に保存されます
//Ext.state.Manager.setProvider(Ext.create('Ext.state.CookieProvider'));
var benefitsStore = new Ext.data.Store({
idProperty: '利点モデル',
プロキシー : {
モデル:「アドバンテージモデル」、
タイプ:「残り」、
API: {
読み取り: admin_path + '/getAdvantages/1/',
作成: admin_path + '/saveAdvantages/1/',
破棄: admin_path + '/destroyAdvantages/1/'
}、
読者 : {
タイプ:「json」、
ルート:「データ」、
totalProperty: 'totalCount'
}、
ライター: {
タイプ: 'json',
ルート: 'データ'
}、
バッファリング: true
}、
リスナー: {
読み取り: 関数 (応答) {
}、
ロード:関数(ストア){
}、
書き込み: 関数 (格納、操作) {
store.load();
}
}、
pageSize : myPageSize,
autoLoad : { 開始: 0, 制限: myPageSize },
オートシンク: 真
});
var rowEditing = Ext.create('Ext.grid.plugin.RowEditing');
var benefitsGrid = new Ext.grid.GridPanel({
id : 'advantagesGrid',
renderTo : 'advantages_grid_div_1',
ストア:アドバンテージストア、
幅 : 482,
高さ : 355,
ステートフル : 真、
stateId : 'advantagesGrid',
タイトル : 'グリッド 2',
iconCls : 'アイコンユーザー',
リスナー: {
beforeedit: function (dv, row, item) {
//advantagesGrid.getView().refresh();
if (row.record.raw)
{
false を返します。
}
}
}、
列: [
{
id : '名前',
テキスト:「利点」、
ソート可能 : false,
dataIndex: '名前',
幅 : 480
}
]、
bbar : Ext.create('Ext.PagingToolbar', {
ストア:アドバンテージストア、
表示情報: 真、
pageSize : myPageSize,
displayMsg : '{0} - {1} と {2} を表示',
emptyMsg: "0 行"
})、
DockedItems: [
{
xtype: 'ツールバー',
項目: [
{
テキスト : '追加',
iconCls: 'アイコン追加',
ハンドラ: 関数 () {
var grid_colums = rowEditing.cmp.getSelectionModel().view.getGridColumns();
grid_colums[0].setEditor({
xtype : 'コンボ',
store : new Ext.data.ArrayStore({
フィールド: ['id', 'name'],
データ: $advantages
})、
displayField : '名前',
値フィールド: 'ID',
モード:「ローカル」、
typeAhead : false,
トリガーアクション: 'すべて',
lazyRender : 真、
emptyText : 'アクションを選択'
});
// 空のレコード
benefitsStore.autoSync = false;
アドバンテージストア.挿入(0, 新しいアドバンテージモデル());
行編集.startEdit(0, 0);
benefitsStore.autoSync = true;
}
}、
'-',
{
itemId : '削除',
text : '削除',
iconCls : 'アイコン削除',
無効: 真、
ハンドラ : 関数 () {
var selection = benefitsGrid.getView().getSelectionModel().getSelection()[0];
if (選択) {
利点Store.remove(選択);
}
}
}
]
}
]、
プラグイン: [rowEditing]
});
benefitsGrid.getSelectionModel().on('selectionchange', function (selModel, selections) {
アドバンテージ Grid.down('#delete').setDisabled(selections.length === 0);
});
});