slickgrid - 在Slickgrid中,以编程方式更新基础数据

  显示原文与译文双语对照的内容
91 2

屏幕顶部有 6个文本框,可以根据任何更改更新整个列( 每列的一个文本框) 。 我正根据他们的类( 。l# ) 选择这些列。 下面是代码( 要遵循的问题):


function UpdateField() {
 var ctrl = this;
 var id = parseInt(ctrl.id.replace("item",""), 10) - 1;
 var bound = [".l1",".l7",".l8",".l9"];
 var fields = $(bound[id]);

 for (var i = 0; i <fields.length; i++)
 {
 fields[i].innerHTML = $(ctrl).val();
 }
};

它被绑定到文本区域的事件。 问题是:


1) initially fields.length was -1 as I didn't want to put data in the"add new 
 row" section at the bottom. However, when running it, I noticed the 
 final"real" record wasn't being populated. Also, when stepping through, I
 noticed that the"new row" field was before the"last row" field.
2) when doing it this way, it is purely superficial: if I double click the field,
 the real data hasn't been changed.

所以在大方案中我知道我做错了。 我认为需要更新数据然后强制渲染但我不确定。

时间: 原作者:

105 0

我知道怎么做了。 以这种方式修改了原始代码:


 function UpdateField() {
 var ctrl = this;
 var id = parseInt(ctrl.id.replace("item",""), 10) - 1;
 var bound = ['title1', 'title2', 'title3', 'title4'];
 var field = bound[id];

 for (var i = 0; i <dataView.getLength(); i++)
 {
 var item = dataView.getItem(i);
 item[field] = $(ctrl).val();
 dataView.updateItem(i, item);
 }
 grid.invalidate();
};

如果改变文本框中的数据,我就会更新所有行和新行,并且添加了这个数据。

可以通过以下方式来解释这两个问题:

1 ) 解决这个问题,但仍然是表示性修复,而不是真正更新底层数据。 额外的工作,而不是在"真实"方向上运行( 屏蔽字段) 。

2 ) 原始实现( 尽管我可以通过 Chrome 开发工具来解决这一问题,但是我可以在时间内修改) 很明显,它只是更新div的内容而不是实际上与下面的数据交互。 如果提交的话,可以能会从item1-item6框中取出数据,但是如果有人尝试修改单元格。

原作者:
...