【发布时间】:2016-09-01 04:33:19
【问题描述】:
我正在开发 Javascript/Node 中的硬件设备导航系统,并在基于滚轮的导航(模拟较旧的硬件旋转拨号系统)方面取得了一些成功。但是当我“自上而下”地构建它时,每个导航级别都有自己的导航功能和设置,我在几个级别之后很快确定这已经失控,并且将来无法维护。可以在这里找到工作的 jsFiddle:https://jsfiddle.net/digitalmouse/by8w6ky9/ 或 https://jsfiddle.net/by8w6ky9/
如果您在 fiddle 的 Javascript 中注意到,有一个重复序列:为菜单选项的特定层生成新的 wheelnav 对象,为该对象设置各种参数和样式,然后通过插入名称“创建”该轮对象的菜单项。还有一个对应的 HTML DIV 伴随着创建。
我喜欢使用 JSON 或 Javascript 数组来包含所有菜单和子菜单信息,然后只需遍历它以动态构建菜单(菜单结构将根据用户访问权限而变化),以及添加同时将 DIV 传递到 DOM(这后面的部分我确实知道该怎么做)。数组看起来像:
menuData = {
"menu": [
{ "id": 0, "name": "DashBoard", "image":"/images/dashboard.gif", "link": "blah.html", "subMenu": [
{ "id": 10, "name": "Running", "image": null, "link": "blah2.html", "subMenu": null },
{ "id": 11, "name": "Alarms", "image": null, "link": "blah3.html", "subMenu": null },
{ "id": 12, "name": "Moisture", "image": null, "link": "blah4.html", "subMenu": [
{ "id": 20, "name": "Overview", "image": null, "link": "blah5.html", "subMenu": null },
{ "id": 21, "name": "M. Details", "image": null, "link": "blah6.html", "subMenu": null }
]
}
]
}
]};
...等等,但我对如何最好地构建某种通用递归来构建导航组件没有信心——尤其是new wheelnav() 和navigateFunction 部分。我将不胜感激任何建议或代码 sn-ps 以减少所涉及的工作和/或促使我朝着正确的方向前进。
【问题讨论】:
-
更新:看起来像 Javascript“工厂模式”的东西是我需要的:一个构建对象的函数。但是到目前为止发现了大量的理论和讨论,而不是很多可以理解的教程......
标签: javascript recursion dynamic navigation