ボタンが発火した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 は undefined として表示され続けます。これが私の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>