ExtJS:在网格中移动记录

时间:2014-04-11 07:13:37

标签: grid extjs4 record move

我在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来查看它是否被调用,并且它是,使用正确的参数)。我没有想法,任何帮助都会受到赞赏。 谢谢。

1 个答案:

答案 0 :(得分:0)

尝试将私有move参数设置为true的{​​{1}}:

store.remove()