在Firebase中将函数存储为值

时间:2014-04-05 19:14:56

标签: jquery firebase

我正在寻找更多指导和帮助,将函数存储为Firebase中的值并在HTML文档中使用。

  1. 在Firebase中将函数存储为值是否可行且可行?

  2. 假设我可以将一个函数保存为Firebase中的值,有人可以给我一些关于调用该函数的Firebase值并在脚本中应用的指导和指导吗?下面是在我的脚本中运行良好的函数,但函数本身对100个文档使用完全相同,我想在以后需要更改函数内的语法时使这个函数转换。 / p>

  3. 以下是我正在使用的功能:

    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);
          });   
       });  
    }
    

2 个答案:

答案 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)

  1. 使用toString创建函数的字符串表示形式。
  2. 将字符串存储在Firebase数据库中。
  3. 在检索字符串时,对它调用eval进行解析,然后根据需要使用它。

我认为这些是您预先定义的功能-用户不可编辑(以避免代码注入)。因此,请确保禁止使用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
});