firebase - 对一个对象使用一个ref并将其推到它的子数组上

时间:2014-08-03 15:00:06

标签: javascript firebase angularfire

此代码有效,但我使用两个引用来访问同一对象的不同区域。

例程可能有多个页面。有没有办法创建新页面,只需使用一个引用将页面推送到$ scope.routine.pages,同时创建一个唯一的ID?

enter image description here

angular.module('screenTester.auth.routine', [
    'screenTester.auth.routine.page'    
])

.config(['$stateProvider', function($stateProvider) {

    $stateProvider
        .state('auth.routine', {
            url: '/routine/:routineId',
            controller: 'RoutineCtrl',
            templateUrl: '/dist/auth/routine/routine.html'
        });

}])

.controller('RoutineCtrl', ['$scope', '$stateParams', '$firebase', function($scope, $stateParams, $firebase) {

    $scope.routineId = $stateParams.routineId;

    // Combine these two and still create pages with a unique id?
    var ref = new Firebase("https://url.firebaseio.com/user" + $scope.auth.user.id + '/routines/' + $scope.routineId);
    var sync = $firebase(ref);

    var ref = new Firebase("https://url.firebaseio.com/user" + $scope.auth.user.id + '/routines/' + $scope.routineId + '/pages');
    var pagesSync = $firebase(ref);

    $scope.createPage = function() {
        // What method would I use here on `$scope.routine`?        
        $scope.routinePages.$add($scope.newPage);
        $scope.routinePages.$save();
        $scope.newPage = {};
        $scope.toggles.showCreatePage = false;
    };

    $scope.init = function() {
      $scope.routine = sync.$asObject();
      $scope.routinePages = pagesSync.$asArray();

      $scope.newPage = {};
      $scope.toggles = {};
    };

    $scope.init();

}]);

免责声明:不是我的最终代码我正在学习firebase是如何工作的,看看它是否是一个很好的解决方案。

1 个答案:

答案 0 :(得分:1)

我不认为使用多个引用是一个问题。与服务器的连接只有一个。

但是,如果您想重用该实例,可以尝试执行以下操作:

var ref = new Firebase("https://url.firebaseio.com/user" + $scope.auth.user.id + '/routines/' + $scope.routineId);

var sync = $firebase(ref);

var pagesSync = $firebase(ref.child('pages'));

这是我所指的documentation