我正在寻找更多指导和帮助,将函数存储为Firebase中的值并在HTML文档中使用。
在Firebase中将函数存储为值是否可行且可行?
假设我可以将一个函数保存为Firebase中的值,有人可以给我一些关于调用该函数的Firebase值并在脚本中应用的指导和指导吗?下面是在我的脚本中运行良好的函数,但函数本身对100个文档使用完全相同,我想在以后需要更改函数内的语法时使这个函数转换。 / p>
以下是我正在使用的功能:
function doThat()
{
$.getJSON(practice_URL,
function(data){
$.each(data.objects, function(i, obj){
var li = $("<li></li>");
var html = "<h1>"+obj.name+"</h1>";
html += "<p>"+obj.description+"</p>";
html += "<p>"+obj.venue.name+", "+
obj.venue.street_address+", "+
obj.venue.locality+", "+
obj.venue.country+", "+
obj.venue.postal_code+
"</p><hr/>";
li.html(html);
$("#ul-data").append(li);
});
});
}
答案 0 :(得分:4)
我过去在Firebase中存储了函数定义,没有任何问题。
要检索它们,我使用了eval
,但可能有更好的方法来实现相同的目标。
handlersRef.on('child_added', function(snapshot) {
eval('handlers["'+snapshot.name()+'"] = '+snapshot.val());
});
handlersRef.on('child_changed', function(snapshot) {
eval('handlers["'+snapshot.name()+'"] = '+snapshot.val());
});
然后我调用这样的函数:
function runTask(id) {
var task = tasks.get(id);
if (task) {
var handler = handlers[task.type];
handler.call(task, id);
}
}
答案 1 :(得分:0)
我认为这些是您预先定义的功能-用户不可编辑(以避免代码注入)。因此,请确保禁止使用Firebase Database Rules编写这些函数字符串。
// Create the function string
const fun = function(name) { console.log('Hello ' + name) };
const funString = fun.toString();
// Store it on RTDB
firebase.ref('/myFunctionStrings/helloWorld').set(funString);
// Retrieve it
firebase.ref('/myFunctionStrings/helloWorld').once('value', snapshot => {
const funString = snapshot.val();
const fun = eval("(" + funString + ")");
// Call it!
fun('Joe') // Output: Hello Joe
});