0

我正在开发一个存储工作项列表的应用程序,这些工作项按预定日期排序。我有 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 上进行了测试。

4

0 回答 0