我正在开发一个javascript菜单(使用jQuery)。
作为一个例子,下面是我将传递给我的自定义函数的items对象的结构,然后创建菜单。
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,所以人们可以通过其他方式将这些信息安全地存储在数据库中,以便以后调用它?
答案 0 :(得分:1)
JSON是语言中立的(尽管名称),因此它只支持原始值。回调函数是特定于语言的(在本例中为javascript),因此它们不能包含在需要解释为纯JSON的任何内容中。
我建议您将回调代码从这里拉出来,而是包含区分每个参数所需的必要参数。然后,通过JS模板引擎(如Handlebars.js)运行此JSON对象,其中包含辅助函数而不是回调函数。这些可以使用您用来替换(现在有效的)JSON对象中的回调函数的参数来调用。