我有一个Ruby on Rails项目,我使用DHTMLX网格。
有没有办法使用事件处理程序" onFullSync"由网格API提供,以显示更新的数据?
让我解释一下......我知道我可以这样做:
dp.attachEvent("onFullSync", function(){
alert("update complete");
})
但我想要的是更复杂的东西。我希望在每次完成更新后,更改div,添加如下信息:
这可能吗?
由于
答案 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">
就是这样。我可能不是最有效的方式,但它适用于我想要的。我会再问几天,看看是否还有其他选项。