0

我正在开发一个 javascript 菜单(使用 jQuery)。

例如,下面是项目对象的结构,我将传递给我的自定义函数,然后创建菜单。

var items = {
    0: {
        name: 'file',
        submenu: {
            0: {
                name: 'open',
                hasSubitems: true,
                subitems: {
                    0: {
                        name: 'file',
                        hasSubitems: false,
                        callback: function() { alert('you opened a file!'); }
                    },
                    1: {
                        name: 'project'
                        hasSubitems: false,
                        callback: function() { alert('you opened a project!'); }
                    }
                }
            },
            1: {
                name: 'exit',
                hasSubitems: false,
                callback: function() { alert('you logged out!'); }
            }
        }
    },
    1: {
        name: 'edit',
        submenu: {
           ...
        }
    }
}

我希望能够将上述内容存储到数据库中,包括他们的预期回调。我打算创建一个界面来动态构建菜单等。

我意识到我可以创建一个 JSON 字符串并以这种方式存储它,但是回调函数呢?有人多次建议我不要使用 eval,那么人们可以通过哪些其他方式安全地将这些信息存储在数据库中,以便以后调用?

4

1 回答 1

1

JSON 是语言中立的(尽管有名称),因此它只支持原始值。回调函数是特定于语言的(在本例中为 JavaScript),因此它们不能包含在任何需要解释为纯 JSON 的内容中。

我建议将你的回调代码从这里拉出来,而是包含你需要区分每个参数的必要参数。然后,通过 JS 模板引擎(如Handlebars.js)使用辅助函数而不是回调运行此 JSON 对象。可以使用用于替换(现在有效的)JSON 对象中的回调函数的参数调用这些。

于 2012-05-22T04:21:19.113 回答