2016-04-09 11 views
0

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を変更する機能を呼び出すことができる、私の配列に格納されたオブジェクトを作成することです。リンクをハードにコーディングすることはできません。なぜなら、1つではないオブジェクトの数を増やしたいからです。

答えて

0

本当にサポートされていませんか?

ここでソフトウェアについて語っていることを考えれば、それは非常にありそうもありません。ドキュメントがあなたを混乱させる可能性が高くなります。あなたが試したことのいくつかを見せてくれれば、助けてもらえます。簡単な例

は、あなたが項目のリストを使用してデータベースを持っていると言う:

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' }); 
+0

コードを追加しました。タイムスタンプの代わりに自分のキーを使用できるようにしたい、 *または*何らかの形でそのタイムスタンプにアクセスし、そのオブジェクトへの直接リンクを得ることができます。私は 'key()'と 'set()'を見ましたが、私はそれらが読み取り専用の配列や、ハードリンクを作ることができる配列ではないオブジェクトのいずれかについて文書化されているようです。 – Jacob

+0

Firebaseには読み取り専用配列はありません。 AngularFireの '$ firebaseArray()'は自動的に同期化された配列です。その配列を変更することができます([docs](https://www.firebase.com/docs/web/libraries/angular/guide/synchronized-arrays.html#section-modifying-the-array)を参照)データベースは直接(上記の私のコードのように)。 AngularFireはFirebase JavaScript SDKの上に構築されているため、完全に相互運用できます。 –

+0

あなたが提案したコードを追加しましたが、データベース内の単一のオブジェクトを参照する方法がまだ分かりません。以下は、データベースからオブジェクトを削除する際のドキュメントの例です: 'messages $ remove(someRecordKey);'。同じページにメッセージを変更する例がありました。特定のオブジェクトに対してレコードキーを取得するにはどうすればよいでしょうか?タイムスタンプは 'timestamp'の下に保存されましたが、書き留めませんでした。私は別の何かによってそれを呼び出すことができますか? – Jacob

0

それはドキュメントに記載されていません。少なくとも、すべてではない。しかし、データベースの配列内のアイテムにアクセスするときには、与えられたすべての通常の属性(たとえば、firstNamelastNameなど)、の素晴らしい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' }); 
}; 

これはサポートされていますし、ドキュメントはもっと親切ではないかもしれません。

関連する問題