精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-05-23
最后修改:2011-05-23
那2个问题我在4.0.1发布的那天就在论坛提了.
onBeforeItem这个官方已经在跟进了. 隐藏列的那个我提了,被无视了. RowEditing的问题多的是... 你那问题,我怀疑是store的配置问题. 你试着: 1.把store设为是autoSync 2.通过一个按钮事件,把store的第2条数据修改个值. 3.观察firebug提交的数据. update/create的判断机制应该是在data/proxy/Rest里面,可以看下源码 ps: 顶楼更新1.3版本 |
|
返回顶楼 | |
发表时间:2011-05-23
最后修改:2011-05-23
我找到原因咯,是因为 field 没有名为 “id”的列,另外,在grid也必须定义该列(我只好故意弄个隐藏的列了)
看了 Ext.grid.RowEditor ,有句,应该是这原因。 me.columns.getKey = function(columnHeader) { var f; if (columnHeader.getEditor) { f = columnHeader.getEditor(); if (f) { return f.id; } } return columnHeader.id; }; 我不知道应该怎么修改。 另外,我就是定义了 idProperty ,也没用 在其update 按钮激发了 completeEdit: function() { var me = this, form = me.getForm(); if (!form.isValid()) { return; } form.updateRecord(me.context.record); me.hide(); return true; }, 结果我在 Ext.form.Basic 找到了 updateRecord 方法 updateRecord: function(record) { var fields = record.fields, values = this.getFieldValues(), name, obj = {}; fields.each(function(f) { name = f.name; if (name in values) { obj[name] = values[name]; } }); record.beginEdit(); record.set(obj); record.endEdit(); return this; }, |
|
返回顶楼 | |
发表时间:2011-05-23
另外,关于 create ,update,destroy 只像后台发送JSON 串,后台怎么能知道执行哪个啊?
|
|
返回顶楼 | |
发表时间:2011-05-23
最后修改:2011-05-23
Model有个field叫id应该就ok了, Model默认的idProperty就是id
如果你是REST的proxy,那根据GET/POST/PUT/DELETE的方法不同,后台自然知道. 具体看INFOQ的一片关于REST的文章介绍. 通过firebug你可以观察到ajax请求的参数,以及它的method(POST/PUT/DEL/GET) |
|
返回顶楼 | |
发表时间:2011-05-23
最后修改:2011-05-23
但我是用ajax发送的。
另外,又发现,其实不需要ID列,只要后台传来带有 id 的列就可以了,不管model配置是否有id列。 还有,我还是弄不明白 load方法,store原来带条件过去了,想重载最后一次的条件,没reload, 用load不能。 干脆问题一起问 我有个form 和 rowedit 要一起发送到后台,不知道如何做? 因为要一起发送,所以autoSync: true 就不能设了。要用按钮做 sync() |
|
返回顶楼 | |
发表时间:2011-05-24
1.设置下store.proxy.extraParams (类似以前的store.baseParams),再load
2.那段的源码我没细看,不过应该是根据model的phantom属性来判断是否为新增. 这里有几个需要注意的地方: 1)点击保存的时候,通过firebug观察你的ajax请求是update还是create,并观察对应的参数里面是否有id. 2)后台处理后,必须返回数据{success:true,data:{id:1,xxxx},msg:''}, RowEditing会根据返回值,去更新对应的model (所以如果你没有返回对应的id,它会在grid里面显示新的一行,而你store.load一次后,会发现那一行没了.) 3.既然你是要一起发送的,那form里面的数据可以不在store里面,自然不能autoSync:true,自己调用sync咯. |
|
返回顶楼 | |
发表时间:2011-06-14
想动态的生成ColumnModel怎么搞了,我在gridPanel中使用是OK的,var scm =new Ext.grid.ColumnModel(eval('([' + columnModelStr + '])')); 可是结果是出错了,在rowEditor中grid.getColumnModel().on('hiddenchange', this.verifyLayout, this, {delay:1});这行出错了,就是grid.getColumnModel()为空
|
|
返回顶楼 | |
发表时间:2011-07-08
最后修改:2011-07-08
请问LZ,roweditor里的combobox,是怎么让它默认出现初始值的?
这是我的情况↓ 左边是个输入框,进入编辑模式后带上了默认值,右边是个combo框,进入编辑模式后就是空的…… 我的代码,如下: { text: '结识方式', width: 75, sortable: true, dataIndex: 'way_to_know', editor: { xtype: "combo", store: [[1, "自己找到的"], [2, "别的客户介绍的"], [3, "网上咨询"], [4, "来电咨询"]], queryMode: 'local', value: 1, lazyRender: true, lazyInit: true, typeAhead: false } } 能帮我分析下么?谢谢了! |
|
返回顶楼 | |
发表时间:2011-07-08
way_to_know的取值是1,2,3还是中文?
|
|
返回顶楼 | |
发表时间:2011-07-12
最后修改:2011-07-12
displayField是中文,valueField是数字……
试了好多方法都没用,但目前这样也能凑合着用: 不编辑这一列的时候它的值不会变,没问题;编辑这一列的话,在提交后台同步之前这一列会显示成“4”这样的数值,但后台刷新之后它就显示成“电话咨询”这样的值,也不冲突。我知道这样肯定是不对的…… 既然LZ还在关注这一帖,那么顺便再问个对你来说肯定不难的小问题吧,先谢谢了。问题是这样的: 本来针对每个可编辑项是有一个校验的,这个好说,vtype什么的。 但现在有一个麻烦一点的校验:校验某两个column是否同时为空。我开始想着用Ext.grid.plugin.RowEditing的事件“validateedit”可以实现,当xx和yy同时为空时alert一下然后返回false。 但是,我好像想得太简单了,“当xx和yy同时为空时”这个我就判断不了,因为我取不到它“编辑之后”的值,取到的值是store里的值,也就是旧值。今天找了好一阵子发现可以用这个来取到“发动”此次编辑那个格子里的值: validateedit: function(editor, e, options){ console.log(e.column.getEditor().getValue()); } 但其它格子里的值还是搞不定。 好吧,怕我没说清楚,举例: 姓名 电话 电邮 张三 87654321 zhang3@163.com 李四 88886666 li4@163.com 其中电话和电邮不能同时为空(一个联系方式都没有就没办法联系此人了,属于无效客户)。 我现在双击“李四”的名字,进入行编辑模式,然后把他的电话和电邮都改成空字符串,这会儿应该提交不了才对。但我如何取到“李四”的“电话”的值(空字符串)呢? |
|
返回顶楼 | |