ExtJS / MODx CMP:网格编辑未保存到db,组合框不显示

时间:2014-07-04 03:37:00

标签: extjs combobox extjs3 modx-revolution datagridcomboboxcolumn

ExtJS或MODext是一个很难记录的主题,所以我来这里寻求帮助。我有2个问题,都在同一个代码中。

基本摘要,我有一个页面,其中有2个标签显示来自2个不同自定义表格的信息。 2个选项卡(分别为:客户端,预算)显示良好,带有信息的网格几乎完全正确显示。几乎...

首先:我有一个扩展MODx.combo的组合,以用户名作为值显示用户的全名,并引用了Ext.util渲染器来显示值。在“预算”选项卡(第二个选项卡)上,此工作正常,但在“客户端”选项卡(第一个选项卡)上,显示不会呈现(双击时仍显示组合。这是我的代码......

首先是扩展名:

GR8.combo.User = function(config) {
    config = config || {};
    Ext.applyIf(config,{
    id: 'user'
        ,name: 'user'
        //,hiddenName: 'user'
        ,displayField: 'fullname'
        ,valueField: 'username'
        ,fields: ['fullname','username']
        ,pageSize: 20
        ,url: MODx.config.connectors_url+'security/user.php'
        ,typeAhead: true
        ,editable: true
    });
    GR8.combo.User.superclass.constructor.call(this,config);
};
Ext.extend(GR8.combo.User,MODx.combo.ComboBox);
Ext.reg('gr8-combo-user',GR8.combo.User);

接下来,客户网格的组合字段代码:

{
   header: 'Agent'
   ,dataIndex: 'clientAgent'   //equates to modx username
   ,sortable: true
   ,width: 60
   ,editor: { xtype: 'gr8-combo-user' ,renderer: true}
   ,renderer: Ext.util.Format.comboRenderer(GR8.combo.User, 'clientAgent')
}

最后,预算网格的组合字段代码:

{
   header: 'Agent'
   ,dataIndex: 'budgAgent'
   ,sortable: true
   ,width: 60
   ,editor: { xtype: 'gr8-combo-user' ,renderer: true}
   ,renderer: Ext.util.Format.comboRenderer(GR8.combo.User, 'budgAgent')
}

我错过了什么,或者这里有什么问题不容易看到?

其次:当我对网格进行更改时,更改未保存 - 小红色三角形停留在网格中字段的左上角。我发现了一个保存按钮,我想我可以在MODx Gallery组件中使用它:

,formpanel: 'gr8-panel-home'
,buttons: [{
    text: _('save')
    ,id: 'gr8-btn-save'
    ,process: 'mgr/gr8/update'
    ,method: 'remote'
    ,keys: [{
        key: 's'
        ,alt: true
        ,ctrl: true
    }]
}]

这会在页面上放置一个保存按钮(它也会复制搜索输入:()),但我想我还需要做些什么。有人能告诉我我需要什么吗请做什么?

2 个答案:

答案 0 :(得分:0)

要直接从网格更新行后保存网格,需要将这两个参数添加到网格定义中:

,save_action: 'path/to/update/from/grid/processor'
,autosave: true

以下是updatefromgrid处理器的示例:https://github.com/modxcms/Tagger/blob/master/core/components/tagger/processors/mgr/tag/updatefromgrid.class.php

答案 1 :(得分:0)

在你的组合框中,你给它一个硬编码的“用户”ID。摆脱它,你应该准备好去。

ExtJS不处理具有相同ID的组件,因此第二次构建组合时,它只是吓坏了,不知道该怎么做。有时它会在共享ID时复制内容,有时它会抛出错误并且什么都不做。

@TheBoxer已经解决了你的第二个问题;添加autosavesave_action应该可以解决问题。