1

我正在使用 AngularJS 和 Firebase 创建一个 webapp,以便同时学习两者。

我在 firebase (activitylog) 中有一些用户活动数据,这些数据对于新用户来说是不存在的。在添加活动数据的控制器中,我无法找出创建新用户条目以记录新数据的最佳方法。我有以下内容,似乎必须有更好的方法,因为它会导致以后永远不会使用的“虚拟”条目。我的 firebase 被安排为活动日志是用户 id 的子项,例如 firebase/activitylog/[userid]/[activityId]/[activityEntry]。它不必是这样,只是似乎是目前组织它的最佳方式。(请注意,根据 FireFeed RSS 开源项目,我有一个处理名为 fbRef 的 firebase 引用的工厂)。如果在引用不存在的东西时调用 angularFire() 只是创建了一条记录,那就太好了,但它只是给出了一个错误。任何帮助,将不胜感激。

.controller('ActivityLogCtrl', ['$scope', '$location', '$routeParams', '$timeout', 'angularFireCollection', 'angularFire', 'fbRef', function($scope, $location, $routeParams, $timeout, angularFireCollection, angularFire, fbRef) {

  //check if the user has a activitylog entry from the past, if not create a default one
  var ref = fbRef(['activitylog', $scope.user.id]);

  ref.on('value', function(snapshot) {
    if(snapshot.val() === null) {
        var wlref = fbRef(['activitylog']);
        // create a new dummy entry
        wlref.child($scope.user.id).set('initial');
    }
  });

  // now I know if have an entry, use it.
  angularFire(fbRef(['activitylog', $scope.user.id]), $scope, 'remote', {}).
  then(function() {

    $scope.activitylog = angular.copy($scope.remote);

    ...
4

1 回答 1

0

您可以更新到最新版本的 AngularFire(此时为 0.3),可在https://cdn.firebase.com/libs/angularfire/0.3.0/angularfire.js - 在此版本中绑定到不存在的数据将只是工作,不需要第四个参数。例如:

var ref = new Firebase(URL);
$scope.remote = {};
angularFire(ref, $scope, "remote");

即使 URL 上没有数据也可以工作。

于 2013-09-18T18:19:55.523 回答