我创建了一个具有 3 个层级的数据库驱动的层级表。它几乎完全按照我想要的方式工作,但驱动其功能的 javascript 代码是丑陋的。我想重写其中的一些,但我不太清楚如何。我想我将不得不使用递归函数,但有一些奇怪的业务规则可能使它比我想象的更难。您能否提出任何建议来简化我当前的代码(特别是 ActivateRow()
函数)?参见 fiddle .
请注意,由于 ASP.NET Web 表单回发和丢失输入值,隐藏字段的使用有些古怪,但有一些有用的数据属性写入 HTML,例如 data-region-id
、data-subregion-id
、data-market-id
和 data-hierarchy-id
。主要要求如下:
- 有两个表 - 第一个链接到第二个,因此第一个表上的所有操作也应该在第二个表上执行(尽管第二个表略有不同)。
- 三个级别的层次结构。最高层(Region)、中间层(Sub Region)、最终层(Market)
- 行激活启用给定行中的所有控件。如果激活的行是子区域行,它会停用其父区域行控件,并且其销售值总计为区域级别。这不适用于激活市场行。
- 同样,行停用应该禁用并清除该行中的所有控件。如果该行是父行,它应该清除所有子行并禁用它们的控件。
- 停用父行的所有子行应停用父行并清除所有父行控件。
当然,还有更好的选择。我是在重新发明轮子吗?有什么东西可以用来改进我的意大利面条代码吗?我意识到这不是问答形式的最佳问题 - 是否还有其他地方我应该问我的问题?
最佳答案
目前还不完全清楚你在做什么,但据我所知,你有某种正在过滤的表格。
另外,您正在使用 ASP.NET webforms....真为您感到抱歉。
我不会使用 ASP WebForms 提供的任何类型的表单绑定(bind)控件,因为它现在已经过时、不正确并且非常痛苦。
相反,创建一个支持 AJAX 的页面 [WebMethod]
返回所有数据或使用参数过滤,无论如何,在 JSON 中(因为 JSON 更容易阅读和调试,并且比XML)
去找jQuery插件DataTables .每一种功能都是内置的和可扩展的,它工作得很好, super 高效的客户端,具有各种过滤和搜索功能。
您可以在服务器端创建一个新模型并重新映射数据服务器端,或者转储现有模型并将其重新映射到客户端,无论哪种方式,您只需将 JSON 数据插入 datatables .
保存回 webforms 稍微有点棘手(与 MVC/Razor 相比),因为你必须获取字符串并将其反序列化到你的模型中,它有一些额外的行,但我一直这样做,你可以继续您的业务逻辑。
关于javascript - 层次结构表 - 通过 javascript 激活行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32232926/