0

我希望能够在按钮触发时从Firebase数据库中读取一段数据。onclick从浏览文档等看来,该once()功能是要走的路,因为我没有尝试将读取的数据链接到任何特定Firebase事件,例如添加孩子,而是当有人单击页面上的按钮时. 这是我打电话的线路once()...

curPoll.once('value', function(curPollSnapshot) {
    numElections = curPollSnapshot.val().NumElections;
});

问题是我无法读取要读取的数据,即使curPoll设置为数据引用并且numElections是我脚本中的全局变量。numElections 不断返回未定义。事实上,我什至似乎无法进入 FireBug 中的函数,就好像有语法错误一样。如果存在语法错误,我无法弄清楚,无论如何我认为如果是这种情况,整个脚本根本不会在 Firebug 中加载。但即便如此,由于某种原因,我可能无法进入该功能以查看发生了什么。

这是设置 curPoll 的函数...

function createPoll() 
{
    var pollName = $('#txtCreatePoll').val();
    if (pollName == "" || pollName == null)
    {
         alert("You must enter a name for your poll!");
         return;
    }
    else 
    {
        pollsRef = new Firebase('https://poll-database.firebaseio.com/Polls');
        //TODO add error callback
        curPoll = pollsRef.push({Name: pollName, Elections: null, NumElections: 0 });
        elections = curPoll.push();
        $('div#divCreateElections1').slideDown('slow');
    }
 }

正如你所看到的,elections参考被推到这里作为参考的孩子curPoll

这是我尝试从选举参考中读取数据的函数....

            function addElection()
            {
                curPoll.once('value', function(curPollSnapshot) {
                    numElections = curPollSnapshot.val().NumElections;
                });
                var electionName = $('div#divCreateElections' + (parseInt(numElections)+1) + ' > input#txtCreateElection').val();
                var numberToElect = $('div#divCreateElections' + (parseInt(numElections)+1) + ' > input#txtNumElect').val();
                if (electionName == "" || electionName == null)
                {
                    alert("You must enter a name for your election!");
                    return;
                }
            }

正如我所说,numElections 不断出现未定义。这是我的firebase数据库的基本结构......

Poll-Database > Polls > Poll1
                        Poll2
                        ...
                        Polln > Name
                              > NumElections
                              > Elections > Election1
                                          > Election2
                                          ...
                                          > Electionn

以防万一这是我页面的正文...

<body>
    <div id="divCreatePoll">
        Enter Name of New Poll:
        <input type="text" id="txtCreatePoll" value="" />
        <br /><br />
        <button id="btnCreatePoll" onclick="createPoll(); return false;">CREATE POLL</button>
        <p id="pError"></p>
    </div>
    <div id="divCreateElections1">
        Enter Election Name:
        <input type="text" id="txtCreateElection" value="" />
        <br /><br />
        Enter Number of Candidates to Elect:
        <input type="text" id="txtNumElect" value="" />
        <br /><br />
        <button id="btnCreateElection" onclick="addElection(); return false;">CREATE ELECTION</button>  
        <br /><br />
        <p id="pError"></p>
    </div>
</body>
4

1 回答 1

2

问题是这once是一个异步调用。所以它不会numElections立即设置。因此,当您使用 numElections 时,它尚未设置。

您只需要在回调中移动其余代码即可。

function addElection() {
   curPoll.once('value', function(curPollSnapshot) {
      numElections = curPollSnapshot.val().NumElections;
      var electionName = $('div#divCreateElections' + (parseInt(numElections)+1) + ' > input#txtCreateElection').val();
      var numberToElect = $('div#divCreateElections' + (parseInt(numElections)+1) + ' > input#txtNumElect').val();
      if (electionName == "" || electionName == null)
      {
         alert("You must enter a name for your election!");
         return;
      }
   });
}
于 2013-05-24T19:46:13.867 回答