2019-03-27 08:05题主

如何在修改界面确定时获取修改前后的值?

如题,根据系统自动生成的增删改查,修改按钮对应的click语句如下:​
Wb.edit(app.grid1, {
  win: app.editWin_adjust,
  url: 'm?xwl=HR/hr/person/update',
  failure: app.failureHandler
});

请教大家如何获取某个属性修改前后的值?
2019-03-28 08:52#1
app.grid1.getSelection()[0].data就是修改的记录值
2019-03-29 09:44#2
var rec = app.grid1.getSelection()[0];

 Wb.edit(app.grid1, {
   win: app.editWin_adjust,
   url: 'm?xwl=HR/hr/person/update',
   failure: app.failureHandler,
   beforerequest: function() {
     if (rec) {
       console.log('=====beforerequest========:');
       var mydata = rec.data;
       var hospital1_old = mydata.hospital1;
       console.log('=============:' + hospital1_old);

     }
   },
   success: function() {
     if (rec) {
       console.log('=====success========:');
       var mydata = rec.data;
       var hospital1_new = mydata.hospital1;
       console.log('=============:' + hospital1_new );
     }
   }
 });
我是通过在两个回调中手动记录。beforerequest中记录修改前数据,success中记录修改后数据。
感觉有些不优雅,
尝试直接使用:
var value_new = data['hospital1'];
var value_old = data['#hospital1'];//打算这样获取原值
发现后者data['#hospital1']获取的是空

请教大家,是否有无其他更便捷的方法?
2019-04-08 09:34#3
win.editHandler(); //Wb.edit调用后默认提供的方法
2019-08-14 12:46#4
以下是我实现时候用到的一段代码, 编辑一个表格的一行,弹出编辑对话框,然后再 winok事件中 获取 修改过的字段,并判断字段的前后。

  values = Wb.applyIf(Wb.getValue(app.appwin), Wb.getData(app.editRec, true)); //Wb.getData用于获取记录中的原始值,见Wb.getData方法
      var fieldName ='', oldValue, newValue, modifiedCnt = 0, updateFields = [], updateFieldNames=[];

      Wb.each(values, function(field) { //直接对一个jason数据枚举比较
        //只比较那些原来记录中有的字段,界面上获取的字段可能会比 数据库实际字段多,因此必须首先找到 有数据库中有定义的字段。
        if (field.indexOf('#') === 0) { //#CONN_SCOPE_TYPE 存放old Value, CONN_SCOPE_TYPE 存放新的值
          fieldName = field.substring(1);
          oldValue = '';
          newValue = '';
          
          //对于一些日期类型等,需要转换为toString()才能进行
          if(!Wb.isEmpty(values[field])){ oldValue = values[field].toString().replace(/\r\n/g,'\n');  } 
          
          if(!Wb.isEmpty(values[fieldName])){ newValue = values[fieldName].toString().replace(/\r\n/g,'\n'); }
          
          if (oldValue == newValue) {
            //do nothing ( fieldName + ':' + oldValue + ' pk ' + newValue + ', equals');
          } else {
            if (newValue === '') {
              updateFields.push(fieldName + '= null');
            } else {
              updateFields.push(fieldName + '= \'' + newValue + '\'');
            }
            
            updateFieldNames.push(fieldName);
            modifiedCnt++;
          }
        }
      });

不知道是否有更高效、更简洁的方式

返回开发者社区