ExtJS/MODx CMP:网格编辑不保存到数据库,组合框不显示
Posted
技术标签:
【中文标题】ExtJS/MODx CMP:网格编辑不保存到数据库,组合框不显示【英文标题】:ExtJS/MODx CMP: grid edits not saving to db, combo box not displaying 【发布时间】:2014-07-04 03:36:59 【问题描述】:ExtJS 或 MODext 是一个困难的主题,文档很少,所以我来这里寻求帮助。我有 2 个问题,都在同一个代码中。
基本摘要,我有一个带有 2 个选项卡的页面,显示来自 2 个不同自定义表的信息。 2 个选项卡(分别为:客户、预算)显示良好,带有信息的网格几乎完全正确显示。差不多……
首先:我有一个扩展 MODx.combo 的组合,以显示用户名作为值的用户的全名,并引用了 Ext.util 渲染器来显示值。在“预算”选项卡(第 2 个选项卡)上,这可以正常工作,但在“客户”选项卡(第一个选项卡)上,显示不会呈现(双击时组合仍然显示。这是我的代码...
首先是扩展:
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
]
]
这会在页面上放置一个保存按钮(它还复制了搜索输入 :( ),但我想我还需要做一些事情。有人可以告诉我我需要做什么吗?
【问题讨论】:
【参考方案1】:要在直接从网格更新一行后保存网格,您需要将这两个参数添加到网格定义中:
,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
【讨论】:
这行得通 - 谢谢;您来自 Tagger 的示例非常有用。现在我有一个问题,id 字段没有命名为“id”,而是命名为“budgId”,并且 MODx 认为该表没有 id 字段,因此它会抛出 err_ns 错误并且不会保存。如果您对此有任何想法,我将不胜感激。我已经在 MODx 论坛上发布了这个:[链接]forums.modx.com/thread/92029/…。也许@MarkHamstra 也可能有线索...... 保存已解决,有关我如何重新定义主键的信息,请参见上面的链接。【参考方案2】:在您的组合框中,您给它一个硬编码的“用户”ID。摆脱它,你应该准备好了。
ExtJS 不处理具有相同 ID 的组件,因此第二次构建组合时,它简直吓坏了,不知道该做什么。有时它在共享一个 ID 时会复制一些东西,有时它会抛出一个错误并且什么都不做。
@TheBoxer 已经解决了您的第二个问题;添加autosave
和save_action
应该可以解决这个问题。
【讨论】:
这些都不起作用。关于保存功能,我将与@TheBoxer 一起解决。但是,通过从任一组合框中删除 id,组合框没有显示任何变化。第一个选项卡中组合的初始显示仍然没有在页面加载时显示,而第二个是。 只是为了确认一下,这个建议对组合框没有任何影响。有没有人有其他想法?以上是关于ExtJS/MODx CMP:网格编辑不保存到数据库,组合框不显示的主要内容,如果未能解决你的问题,请参考以下文章