スケジュールされた日付順に並べられた作業項目のリストを保存するアプリに取り組んでいます。2 つのクエリがあります。1 つは優先度が最も高い項目 (最新のスケジュール) を監視するためのもので、もう 1 つは優先度が最も低いもの (最も早いスケジュール) を監視するためのものです。
var FB = new Firebase('https://pckben-testquery.firebaseio-demo.com/');
FB.startAt().limit(1).on('child_added', function(snapshot) {
var topItems = JSON.stringify(snapshot.name());
$("#topItems").text(topItems);
});
FB.endAt().limit(1).on('child_added', function(snapshot) {
var lastItems = JSON.stringify(snapshot.name());
$("#lastItems").text(lastItems);
});
私のデータは次のようなものです:
a: 1365931229230 <-- scheduled date, also set as its priority
b: 1365931230662
c: 1365931241984
d: 1365931258729
e: 1365931266804
結果は期待どおりではありませ#topItems
ん#lastItems
。
しかし、リスト全体を監視する別のクエリを含めると、すべてが期待どおりに機能します。
$scope.items = []; // I'm using AngularJS
FB.on('value', function(snapshots) {
$scope.items = [];
snapshots.forEach(function(ss) {
$scope.items.push({
name: ss.name(),
schedule: ss.val()
});
});
if (!$scope.$$phase) $scope.$apply();
});
この動作を理解するには、まずhttp://jsbin.com/azisuf/1/editにアクセスし、次にhttp://jsbin.com/ejujef/1/editにアクセスしてください。更新ボタンをクリックして、アイテムを最後の行に移動します。最初のバージョンでは、「最後の行」セクションに期待どおりに最後の行が表示されませんが、2 番目のバージョンでは表示されることがわかります。
コードは Chrome と Safari でテストされています。