我在ExtJS上有一个简单的网格,并希望用户能够从原始位置移动记录。 当用户双击记录时,会出现一个包含组合框的小窗口,他可以在组合框中选择一个值,然后单击保存按钮以应用更改。 但是,它不起作用,我在不同的论坛上搜索了许多解决方案,但似乎都没有。没有任何反应,或者在网格末尾添加未定义的行。这是我使用的基本代码:
onEditRank: function(view, cell, cellIndex, record, row, rowIndex, e)
{
var reditor = Ext.create('CMS.view.Views.RankEditor', {id: 'reditorView'});
var form = reditor.down('form');
var oldPos = this.getFlatrq().getView().indexOf(record);
var grStore = this.getGridRnkStoreStore();
var i;
var data = [];
for(i = 1; i <= CMS.global.Variables.limit + 1; i++)
{
data.push(i);
}
var combo = Ext.create
(
'Ext.form.field.ComboBox',
{
fieldLabel: 'Rank',
itemId: 'cmbRank',
store: data
}
);
var saveRnk = Ext.create
(
'Ext.button.Button',
{
text: 'Save',
handler: function()
{
}
}
);
form.add(combo);
form.add(saveRnk);
reditor.show();
}
现在这里是我为保存按钮尝试的不同处理程序:
handler: function()
{
grStore.remove(record);
grStore.insert(record, combo.getValue() - 1);
this.up('form').up('window').close();
}
handler: function()
{
grStore.removeAt(oldPos);
grStore.insert(record, combo.getValue() - 1);
this.up('form').up('window').close();
}
handler: function()
{
var rec = grStore.getAt(oldPos).copy();
grStore.removeAt(oldPos);
grStore.insert(rec, combo.getValue() - 1);
this.up('form').up('window').close();
}
这3个处理程序在我的网格末尾插入了未定义的行。我显示了oldPos和combo.getValue()的值,它们是正确的,我还在删除之前和之后显示了记录变量,因为我认为它可能会被销毁,但它不是。我还尝试添加一个移动函数来存储和调用它:
'CMS.store.GridRnkStore',
{
extend: 'Ext.data.Store',
model: 'CMS.model.GridRnkModel',
autoLoad: false,
filterOnLoad: true,
autoSync: true,
move: function(from, to)
{
console.log(from + " " + to);
var r = this.getAt(from);
this.data.removeAt(from);
this.data.insert(to, r);
this.fireEvent("move", this, from, to);
},
}
);
但它也没有工作,它实际上什么都没做(我在移动函数中放了一些console.log来查看它是否被调用,并且它是,使用正确的参数)。我没有想法,任何帮助都会受到赞赏。 谢谢。
答案 0 :(得分:0)
尝试将私有move
参数设置为true
的{{1}}:
store.remove()