论坛首页 Web前端技术论坛

ExtJS 4.0 改善Ext.grid.plugin.RowEditing (更新v1.4版本2011-09-11)

浏览 13595 次
精华帖 (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版本
0 请登录后投票
   发表时间: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;
    },


0 请登录后投票
   发表时间:2011-05-23  
另外,关于 create ,update,destroy 只像后台发送JSON 串,后台怎么能知道执行哪个啊?
0 请登录后投票
   发表时间: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)
0 请登录后投票
   发表时间:2011-05-23   最后修改:2011-05-23
但我是用ajax发送的。

另外,又发现,其实不需要ID列,只要后台传来带有 id 的列就可以了,不管model配置是否有id列。

还有,我还是弄不明白 load方法,store原来带条件过去了,想重载最后一次的条件,没reload, 用load不能。

干脆问题一起问

我有个form 和 rowedit 要一起发送到后台,不知道如何做?
因为要一起发送,所以autoSync: true 就不能设了。要用按钮做 sync()
0 请登录后投票
   发表时间: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咯.
0 请登录后投票
   发表时间: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()为空
0 请登录后投票
   发表时间: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
    }
  }


能帮我分析下么?谢谢了!
0 请登录后投票
   发表时间:2011-07-08  
way_to_know的取值是1,2,3还是中文?
0 请登录后投票
   发表时间: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
其中电话和电邮不能同时为空(一个联系方式都没有就没办法联系此人了,属于无效客户)。
我现在双击“李四”的名字,进入行编辑模式,然后把他的电话和电邮都改成空字符串,这会儿应该提交不了才对。但我如何取到“李四”的“电话”的值(空字符串)呢?
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics