Firebase 中的动态数组
Dynamic Arrays in Firebase
Firebase 允许轻松创建数组,但它们声称是只读的。我想要一个我可以进入并更新或更改它们的某些属性的对象数组。
问题是 Firebase 中的数组是使用时间戳作为键创建的。 Firebase 中的所有内容都是 URL,我没有这些键可以放入 URL。
我正在使用 AngularFire 和 Firebase。
.controller('LinkCtrl',[ '$scope', '$firebaseArray', '$firebaseObject', '$log', function ($scope, $firebaseArray, $firebaseObject, $log) {
var ref = new Firebase('https://candyman.firebaseio.com/links');
$scope.links = $firebaseArray(ref);
$scope.addLink = function () {
// newly added
var newLinkRef = ref.push();
newLinkRef.set({ name: $scope.newLinkName, url: $scope.newLinkUrl, downloadCount: 1, timestamp: Firebase.ServerValue.TIMESTAMP });
// !newly added
$scope.newLinkName = '';
$scope.newLinkUrl = '';
$log.info($scope.newLinkName + ' added to database');
};
我的目标是创建一个存储在我的数组中的对象,然后在稍后的某个时间段能够调用一个函数来修改特定对象的 downloadCount
。我无法对 link 进行硬编码,因为我想增加任何对象的计数,而不仅仅是一个。
Is it really not supported?
考虑到我们在这里谈论的是软件,这不太可能。文档更有可能让您感到困惑。如果您展示您尝试过的一些东西,那么帮助会容易得多。
举个简单的例子,假设您有一个包含项目列表的数据库:
var ref = new Firebase('https://yours.firebaseio.com');
var itemsRef = ref.child('items');
现在您向此列表中添加一个新项目:
var newItemRef = ref.push();
newItemRef.set({ name: 'New Item', user: 'Jacob Dick', timestamp: Firebase.ServerValue.TIMESTAMP });
然后您可以更改该项目的单个 属性:
newItemRef.update({ user: 'Frank van Puffelen' });
事实证明它没有列在文档中。至少,根本不是在前面。但是,当您访问数据库中数组中的项目时,它会附带您为其提供的所有常规属性(例如 firstName
、lastName
等。所有常规属性)加精彩的id
属性。 id
是您将项目添加到数组时获得的时间戳。
一旦你得到 id
(时间戳),你就可以用它来引用你的项目(因为你对数据库的所有引用都是通过 URL 完成的)。所以你可以结束说...
var ref = new Firebase(https://myApp.firebaseio.com/users/);
// ref now holds the string that is your URL
$scope.users = $firebaseArray(ref);
// 'user' can be passed in through $scope
$scope.updateUserName = function (user) {
var userRef = new Firebase(ref + user.$id);
// userRef now holds the string that is the URL to your user that you just passed in
// don't be scared to use dynamic, client-facing variables instead of hard-coding this. It works.
userRef.update({ firstName: 'Jacob' });
};
所以,是的。它是受支持的。而且文档可能对新手更友好。不需要都是精英。
Firebase 允许轻松创建数组,但它们声称是只读的。我想要一个我可以进入并更新或更改它们的某些属性的对象数组。
问题是 Firebase 中的数组是使用时间戳作为键创建的。 Firebase 中的所有内容都是 URL,我没有这些键可以放入 URL。
我正在使用 AngularFire 和 Firebase。
.controller('LinkCtrl',[ '$scope', '$firebaseArray', '$firebaseObject', '$log', function ($scope, $firebaseArray, $firebaseObject, $log) {
var ref = new Firebase('https://candyman.firebaseio.com/links');
$scope.links = $firebaseArray(ref);
$scope.addLink = function () {
// newly added
var newLinkRef = ref.push();
newLinkRef.set({ name: $scope.newLinkName, url: $scope.newLinkUrl, downloadCount: 1, timestamp: Firebase.ServerValue.TIMESTAMP });
// !newly added
$scope.newLinkName = '';
$scope.newLinkUrl = '';
$log.info($scope.newLinkName + ' added to database');
};
我的目标是创建一个存储在我的数组中的对象,然后在稍后的某个时间段能够调用一个函数来修改特定对象的 downloadCount
。我无法对 link 进行硬编码,因为我想增加任何对象的计数,而不仅仅是一个。
Is it really not supported?
考虑到我们在这里谈论的是软件,这不太可能。文档更有可能让您感到困惑。如果您展示您尝试过的一些东西,那么帮助会容易得多。
举个简单的例子,假设您有一个包含项目列表的数据库:
var ref = new Firebase('https://yours.firebaseio.com');
var itemsRef = ref.child('items');
现在您向此列表中添加一个新项目:
var newItemRef = ref.push();
newItemRef.set({ name: 'New Item', user: 'Jacob Dick', timestamp: Firebase.ServerValue.TIMESTAMP });
然后您可以更改该项目的单个 属性:
newItemRef.update({ user: 'Frank van Puffelen' });
事实证明它没有列在文档中。至少,根本不是在前面。但是,当您访问数据库中数组中的项目时,它会附带您为其提供的所有常规属性(例如 firstName
、lastName
等。所有常规属性)加精彩的id
属性。 id
是您将项目添加到数组时获得的时间戳。
一旦你得到 id
(时间戳),你就可以用它来引用你的项目(因为你对数据库的所有引用都是通过 URL 完成的)。所以你可以结束说...
var ref = new Firebase(https://myApp.firebaseio.com/users/);
// ref now holds the string that is your URL
$scope.users = $firebaseArray(ref);
// 'user' can be passed in through $scope
$scope.updateUserName = function (user) {
var userRef = new Firebase(ref + user.$id);
// userRef now holds the string that is the URL to your user that you just passed in
// don't be scared to use dynamic, client-facing variables instead of hard-coding this. It works.
userRef.update({ firstName: 'Jacob' });
};
所以,是的。它是受支持的。而且文档可能对新手更友好。不需要都是精英。