开发一个应用程序,其中所有表格数据都作为对象返回。
某些单元格上会有onclick事件。
JSON对象恢复正常,对象调用'cb'中有一个键。
这是由服务器上的逻辑设置的。
我的问题是对象键cb将包含一个字符串,如何在不使用eval()的情况下将其作为有效函数运行
示例:
var archive = function() {
console.log('archiving');
}
new Request.JSON ({
...
onSuccess: function(r){
//r.cb: 'archive'
docuemnt.id(td).addEvent('click', r.cb);
}
...
});
docuemnt.id(td).addEvent('click',eval(r.cb)); //寻找替代方案
我知道我在想这个并不应该那么困难。 今天一定还没有足够的咖啡。
答案 0 :(得分:3)
使用方括号表示法。如果您的函数在全局范围内,请使用window[r.cb]
:
new Request.JSON ({
...
onSuccess: function(r) {
//r.cb: 'archive'
document.id(td).addEvent('click', window[r.cb]);
}
...
});
如果您的函数不在全局范围内,请将函数移动到对象中:
var callbacks = {
archive: function () { ... },
foo: function () { ... },
...
}
然后使用callbacks[r.cb]
。