- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 HandsOnTable 使编辑数据库表格在我的网站上更具交互性。
HandsOnTable 几乎满足我的所有要求,除了我数据库中的某些列实际上存储外键而不是本地字符串值。
在 UI 中,我希望这些列显示为下拉菜单,用户可以在其中选择映射到前面提到的外键的可读值(即类似 HTML 名称/值 select
的内容)。
很遗憾,HandsOnTable 没有这样的单元格类型。最接近它的是 autocomplete
。这允许我创建一个下拉列表,但它只包含值;没有对应的键。这是它的创建方式:
"source": ["Jebediah", "Bob", "Bill", "Buzz"]
所以我打算从服务器发送两个 Json 字符串:
一个包含 HandsOnTable 渲染表格所需的参数:
{
"data": [
{ "ID": 1, "Description": "Crude", "Volume": 204, "Customer": "jebediah" },
{ "ID": 2, "Description": "Hidrogen", "Volume": 513, "Customer": "Bob" },
{ "ID": 3, "Description": "Coal", "Volume": '67', "Customer": "Bill" },
{ "ID": 4, "Description": "Wood", "Volume": '513', "Customer": "Buzz" }
],
"columns": [
{ "data": "ID", "type": "numeric" },
{ "data": "Description", "type": "text"},
{ "data: "Volume", "type": "numeric" },
{ "data": "color", "type": "autocomplete", "strict": "true",
"source": ["Jebediah", "Bob", "Bill", "Buzz"]}
]
}
第二个键到值的映射
{
"mappings": [
{"key": 0, "value": "Jebediah"},
{"key": 0, "value": "Bob"},
{"key": 0, "value": "Bill"},
{"key": 0, "value": "Buzz"}
]
}
到目前为止一切顺利。现在是棘手的部分:
HandsOnTable 有一个函数 (getData()
),它允许我将表格数据检索为 Json 字符串,准备发送回服务器:
var jdata = myHandsOnTable.getData();
jdata 看起来像这样:
"data": [
{ "ID": 1, "Description": "Crude", "Volume": 204, "Customer": "jebediah" },
{ "ID": 2, "Description": "Hidrogen", "Volume": 513, "Customer": "Bob" },
{ "ID": 3, "Description": "Coal", "Volume": '67', "Customer": "Bill" },
{ "ID": 4, "Description": "Wood", "Volume": '513', "Customer": "Buzz" }
]
现在,在发布之前,我想将 Customer
节点的值替换为 mappings
json 字符串中的匹配键对。
如何在 JavaScript/JQuery 中最好地实现这一点?
是否有一个函数可以按如下方式工作?
jdata.replaceNode('node', mappings)
谢谢
最佳答案
我遇到了类似的问题,这就是我所做的......
对于每个外键列,我在 handsontable 中存储了 2 个值;一个用于 ID 本身,我将其设置为隐藏列,另一个是作为下拉列表的用户友好的可读文本值。
每次更改下拉列表的值时,我也会更改相应的隐藏 ID。在我的例子中,我在 handsontable 之外有一个下拉列表作为过滤器,我用它来映射键/值对,但你可以使用哈希表或其他任何东西。
现在代码...
掌上电脑配置:
afterChange: function (changes, source) { AfterChange(changes, source); }
更改后事件(每次表中发生更改时调用):
function AfterChange(Changes, Source) {
if (Source === 'loadData') {
return; //don't save this change
}
var rowIndex = 0, columnID = 1, oldTextVal = 2, newTextVal = 3, ntv = '', nv = '';
$(Changes).each(function () {
if (this[columnID] === 'CategoryID') {
// Do nothing...
//To make sure nothing else happens when this column is set through below
}
else if (this[columnID] === 'CategoryName') {
ntv = this[newTextVal];
//This is where I do my mapping using a dropdown.
nv = $('#CategoriesFilterDropdown option').filter(function () { return $(this).text() === ntv; }).val();
//13 is my CategoryID column
$container.handsontable('setDataAtCell', this[rowIndex], 13, nv);
}
});
}
}
这样,您可以随心所欲地更改外键,而无需在保存前遍历所有内容。它还可以轻松地将表数据按原样发送回服务器。
在总结中,
CategoryName
列(类型为 autocomplete
)进行交互。colWidths
选项将列宽设置为 0,用户可以隐藏 CatgoryID
列。CategoryName
字段发生变化时,使用afterChange
事件设置相应的CategoryID
列。就我而言,我在页面的其他地方使用下拉列表来映射名称 => ID,但您可以使用其他方式,例如哈希表。我希望这是有道理的...
关于javascript - Handsontable 在发布前用键替换自动完成值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17839550/
如何使用 handsontable 中的 handsontable 禁用特定列。我希望第一列仅可编辑,其他三列被禁用。我对三列使用 readonly true 但如何禁用它不起作用....
如何使用 handsontable 中的 handsontable 禁用特定列。我希望第一列仅可编辑,其他三列被禁用。我对三列使用 readonly true 但如何禁用它不起作用....
似乎是一项简单的任务,但我还没有找到简单的解决方案。我的数据有时以空数组的形式出现,以便用户可以开始处理空表(标题除外)。该表有一个 minSpareRows:1所以我希望表格会出现那个备用行而不是其
问题 :我可以更改单元格的背景颜色,但不能更改标题的背景颜色。我可以在 Handsontable 中更改标题的背景颜色和字体颜色吗? 最佳答案 您可以为此使用 jquery 或 css。例如,将背景颜
客户 ID 列设置为使用自动完成。自动完成值将各种客户信息连接在一起,以帮助用户选择正确的信息。选择后,客户 ID 将放入网格中。 我无法弄清楚如何使自动完成弹出窗口更宽,以便它适合连接的信息。 这就
在 Handsontable 中,当单击列标题时,将选择该列的所有单元格。有办法防止这种情况发生吗? 我认为文档中没有这样的选项。我也没有在 Handsontable 库本身的源代码中找到事件在 DO
我正在尝试像这样更新 Handsontable 中的列设置: var newColumnSettings = [{ data: 0, readOnly: true }, { data: 1 }, {
我可以看到有一些方法可以在渲染前在单元格数组中创建注释,并使用上下文菜单。但是有没有办法在更改后创建评论? 我最初试过这个: var errors = []; var hot = new Handso
如何在此下拉菜单中允许固定高度? (柱车) 我一直在无休止地摆弄以解决高度问题。我想要一个最大 300px 的固定高度下拉菜单。我用过AutoRowSize handsontable 站点中的高度功能
我正在尝试在 Handsontable 网格内使用“Handsontable”编辑器。我希望用户能够从“下拉”类型菜单中进行选择,但该菜单显示多列相关数据(用户正在选择一个 ID 号,我希望能够显示相
我正在尝试使用 Handsontable 版本 0.34.4CE/1.14.2 PRO 在 Handsontable (HOT-in-HOT) 中创建 Handsontable。根据此处提供的文档,一
有没有什么方法可以从列名中获取列号? 我只能检索列名,我需要 getCellMeta 的列号。 谢谢 最佳答案 使这个功能解决了我的问题: function GetColFromName(name)
我正在尝试将handsontable下拉列表的宽度设置为根据查找数据宽度,而不是列宽。如何做到这一点? 请看下图。下拉列表太窄,无法容纳查找数据。 最佳答案 https://github.com/ha
我希望能够在Handsontable中编辑列标题的文本,但似乎无法弄清楚是否可以使它们可编辑。我想我可以将标题改成另一行,但我想尽可能避免这种情况。 澄清一下:我实际上是在寻找一种允许用户编辑 hea
是否可以在事件内部更改 Handsontable 实例中的源? 下面是我的代码: var container2 = $('#example2'); var hot2 = new Handsontabl
HandsonTable 不会渲染所有行 - 它仅加载所有行的一部分。但是,当我执行 Ctrl+A 并将其粘贴到 Excel 中时,我会看到所有行。为什么 Handsontable 不显示所有行?
我正在尝试动态地将一列添加到手动表中。我在任何地方都没有看到示例,也没有在 API 中看到这样做的方法。有没有人找到一种方法来克服这个问题,或者有一些示例代码可供我查看,这会有所帮助。 谢谢。 最佳答
是否可以让 Handsontable 中的数据按未显示的字段排序?我有一个数据网格,我想显示它包含一个名为“sortOrder”的列,但我不想显示它。 排序需要在客户端完成,因为事件是通过网络套接字传
我正在使用 handsontable,我的代码是用 typescript/aurelia 编写的。我无法将复选框列居中对齐。我关注了this链接并将我的复选框列上的 className 设置为“htC
是否可以设置 max-width和 max-height对于 Handsontable 中的单元格? 我试图通过 CSS 在 上进行设置和 元素,但这不起作用。 我在文档中看到您可以将列设置为特定宽
我是一名优秀的程序员,十分优秀!