我正在开发一个存储工作项列表的应用程序,这些工作项按预定日期排序。我有 2 个查询,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
和输出最上面的项目“a” #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。单击更新按钮将项目移动到最后一行。您会看到,在第一个版本中,“最后一行”部分没有按预期显示最后一行,而在第二个版本中显示。
这些代码在 Chrome 和 Safari 上进行了测试。