1 回答
TA贡献1786条经验 获得超13个赞
你不具备使用JSON,但你需要以某种方式序列化。JSON可能是一种非常干净的方法。
那里有一些库可以做到这一点,但粗略看一下,它们似乎都没有得到很好的支持,因此您可能要避免。
在这种情况下,这似乎很简单,我可能会采用一种更直接的方法,即您或多或少地手工完成。
首先,由于您看起来像中有metric,operator并且value在每种情况下,我都将从对象中的内容开始:
{
rows: [
{ metric: 'someValue', operator: 'someValue', value: 'someValue' },
// .. more as necessary
]
}
我会将对象构建为POJO(普通的旧JavaScript对象),然后用于JSON.stringify()将其转换为JSON。
使用数据,您基本上可以遍历并输出HTML:
function render(rows) {
rows.forEach(({ metric, operator, value }) => {
// create elements based on these value
});
}
为了保存数据,有两种方法:
解析HTML,然后将其转换为JSON对象
将数据保留为对象,对其进行更新,然后根据其重新呈现页面
我更喜欢第二种方法。而不是直接制作HTML,而是拥有一个数据对象,并且在进行更改时,更新该对象并只需调用您的render()方法即可重新呈现。这意味着在保存时不必解析HTML。
它还将简化您提到的允许用于添加此内容的工具,因为它要做的全部是rows.push({ metric: 'defaultValue', operator: 'defaultValue', value: 'defaultValue' })。
唯一的另一件事是onChange()向每个输入添加一个。当它们更改时,找出它在哪一行(获取.row父行,找出它相对于其兄弟姐妹的索引,那将是该rows对象的相同索引)和字段(只需获取类名),然后更新即可适当的值。
这种基于渲染的数据也是React,Angular和Vue之类的库所做的。根据您的项目,您可能会考虑利用其中之一来帮助解决问题(尽管如果项目很小,那么如果没有,它是完全可行的)。
- 1 回答
- 0 关注
- 167 浏览
添加回答
举报