onFullSync动作,显示更新的信息 - DHTMLX Grid + RoR

时间:2014-12-10 20:30:03

标签: ruby-on-rails dhtmlx

我有一个Ruby on Rails项目,我使用DHTMLX网格。

有没有办法使用事件处理程序" onFullSync"由网格API提供,以显示更新的数据?

让我解释一下......我知道我可以这样做:

dp.attachEvent("onFullSync", function(){
       alert("update complete");
  })

但我想要的是更复杂的东西。我希望在每次完成更新后,更改div,添加如下信息:

  • 字段2已更新为XYZ,字段3已更新为X行XER
  • 字段1已更新为123,字段3已更新为第Y行的XSD

这可能吗?

由于

2 个答案:

答案 0 :(得分:2)

有一个onAfterUpdate事件,可以像onFullSync一样使用 http://docs.dhtmlx.com/api__dataprocessor_onafterupdate_event.html

每次数据保存操作后都会触发(如果你保存5行 - 它将触发5次) 但是,此处不提供有关更新列的信息。

此外,您可以尝试onEditCell网格事件。它在更改数据库中的数据后触发,但在实际保存在数据库之前触发。在这里,您可以获得所有必要的信息 - 行,列,旧值和新值。

http://docs.dhtmlx.com/api__link__dhtmlxtreegrid_oneditcell_event.html

答案 1 :(得分:0)

所以,我最终做的是:

创建网格后,我创建了一个数组:

var samples = [];       

然后,按照@Aquatic的建议,我在“onEditCell”事件中添加了以下内容:

samples[samples.length] = grid.cells(rId, 5).getValue();

这允许我向数组添加更改行的第5列上的值。然后,在“onFullSync”事件中,我隐藏或显示在视图上创建的带有消息的div(我区分它是否在行上或更多在网格上更改)。

//Deals with messages after update
dp.attachEvent("onFullSync", function(){
  unique_samples = uniq_fast(samples.sort());
    if (unique_samples.length == 1){
      $('#updated-samples').text("");
      $(".messages").show();
      $('#updated-samples').text("A seguinte amostra foi actualizada: " + unique_samples[0]);
      //to clear the array
      samples = [];
    } else if (unique_samples.length > 1){
        $('#updated-samples').text("");
        $(".messages").show();
        $('#updated-samples').text("As seguintes amostras foram actualizadas: " + unique_samples.sort().join(", "));
        //to clear the array
      samples = [];
       } else {
          $('#updated-samples').text("");
          $(".messages").hide();   
         //to clear the array
      samples = [];          
          } 
  })

使用“onEditCell”的问题是每次在该行上更改字段时,我在“samples”数组上得到重复值,我不得不从该数组中删除重复项。为此,我使用了answer

中的一个建议
  // remove duplicates in array
  function uniq_fast(a) {
      var seen = {};
      var out = [];
      var len = a.length;
      var j = 0;
      for(var i = 0; i < len; i++) {
           var item = a[i];
           if(seen[item] !== 1) {
                 seen[item] = 1;
                 out[j++] = item;
           }
      }
      return out;
  }

然后我在视图的开头显示消息:

<div class="alert alert-success messages" id="updated-samples">

就是这样。我可能不是最有效的方式,但它适用于我想要的。我会再问几天,看看是否还有其他选项。