2013-09-04 20 views
5

Aktualizuję niektóre właściwości mojego obiektu w bazie firebase za pomocą metody aktualizacji. Czy w ramach aktualizacji można aktualizować priorytet mojego obiektu?Czy możemy użyć funkcji aktualizacji Firebase do aktualizacji priorytetu również

Mam kolekcję obiektów przechowywanych w bazie firebase. Używam Javascript sdk do interakcji z moimi danymi. Ilekroć aktualizuję dowolną właściwość obiektu, ustawiam priorytet obiektu na stałą Firebase.ServerValue.TIMESTAMP.

Teraz chcę rozpocząć przechowywanie priorytetu każdego obiektu we właściwości o nazwie ZaktualizowaneOznacznikiTylków zdefiniowane w obiekcie. Za każdym razem, gdy aktualizuję jakąkolwiek właściwość, zaktualizuję również UpdateOnTimestampTs ze stałą TIMESTAMP.

Problem polega na tym, że nie mogę znaleźć sposobu, aby zadzwonić do funkcji aktualizacji wraz z priorytetem (brak aktualizacji z Priorytetem jak setWithPriority). Więc jeśli zaktualizuję UpdateOnTimestampTs i priorytet w dwóch różnych operacjach przy użyciu stałej TIMESTAMP, mogę (lub otrzymam) inne wartości.

Jak mogę rozwiązać ten problem?

+0

Jaki jest cel powielenia priorytetu w danych? Jakiś powód, dla którego nie używasz po prostu getPriority() na zwróconych danych? Zrozumienie szczegółów użycia tutaj pomoże uzyskać zwięzłą odpowiedź. – Kato

+0

Z dwóch powodów - 1. Kuźnia Firebase nie wyświetla priorytetu i chcemy poznać tę wartość. i 2.Używamy interfejsów API REST w warstwie pośredniej na poziomie C#, aby pobierać dane w dół i znowu nie widzimy priorytetu w danych rozebranych. – Kartik

+0

Możesz dodać "format = export" jako parametr zapytania do twoich wywołań REST w celu wyeksportowania danych priorytetowych. Niestety w Firebase nie ma jeszcze funkcji updateWithPriority. – Anant

Odpowiedz

7

Wiem, że jestem spóźniony na odpowiedź tutaj, ale właśnie natknąłem się na potrzebę czegoś podobnego teraz i updateWithPriority nie istnieje (ani sposobu na łatwe przeglądanie/edytowanie priorytetów w Kuźni).

Możesz dodać specjalnie nazwany klucz, .priority do swojej aktualizacji i uzyskać pożądany efekt.

Klucz .priority jest udokumentowany w Firebase REST API, ale może być używany w innych bibliotekach.

Więc w JavaScript, co następuje będzie działać, jeśli tylko chciał zaktualizować priorytet (co jest setPriority do tego):

var fb = new Firebase("http://a_firebase.firebaseio.com"); 
var ref = fb.child("/path/to/child"); 
var data = { ".priority": (new Date()).getTime() } //timestamp, as you mentioned 
ref.update(data); 

Jeśli chcesz zmienić priorytet podczas Aktualizujemy inne właściwości, które jest co prosił, po prostu umieścić go z danymi chcesz zaktualizować:

var fb = new Firebase("http://a_firebase.firebaseio.com"); 
var ref = fb.child("/path/to/child"); 
var data = { 
    "property1": "updated_val", 
    "property2": "updated_val2", 
    ".priority": (new Date()).getTime(), //timestamp, as you mentioned 
} 
ref.update(data); 

EDIT: Żeby było jasne, to zaktualizować priorytet w miejscu odnośnika potomnego (tj. /path/to/child), a nie priorytety poszczególnych dzieci, które są aktualizowane (tj. Priorytety property1 i property2). Jeśli chcesz uwzględnić priorytet dla dzieci, które są aktualizowane, a dzieci są węzłami liści (tj. Ciągiem, liczbą, wartością logiczną), to możesz użyć specjalnie nazwanego klucza .value w połączeniu z kluczem .priority, aby to zrobić.

Poniższy przykład pokazuje, jak zaktualizować priorytet dla lokalizacji korzeniowego, że aktualizacja jest występującego z (tj path/to/child), jak również dla obu dzieci, które toczy się aktualizację (tj property1 i property2). Oczywiście możesz selektywnie wybrać priorytety do aktualizacji, jeśli nie chcesz ich wszystkich aktualizować.

var fb = new Firebase("http://a_firebase.firebaseio.com"); 
var ref = fb.child("/path/to/child"); 
var newPriority = (new Date()).getTime(); //timestamp, as you mentioned 
var data = { 
    "property1": {".value": "updated_val", ".priority": newPriority}, 
    "property2": {".value": "updated_val2", ".priority": newPriority}, 
    ".priority": newPriority 
} 
ref.update(data); 
+0

Czy 'new Date()' pobiera czas komputera klienta? Wtedy inni użytkownicy mogą mieć czas. – tomasbarrios

+0

'new Date()' zwraca nowy [Javascript Date Object] (http://www.w3schools.com/jsref/jsref_obj_date.asp), a 'getTime()' to metoda, która zwraca ["liczbę milisekund" od 1970/01/01 "] (http://www.w3schools.com/jsref/jsref_gettime.asp). Tak, to zwraca czas komputera klienckiego. Jeśli chcesz użyć czasu serwera, możesz użyć specjalnego symbolu zastępczego, aby powiadomić Firebase o automatycznym wypełnieniu aktualnego znacznika czasu (czasu od epoki Uniksa w milisekundach) przez serwery Firebase - patrz [Firebase.ServerValue.TIMESTAMP] (https://www.firebase.com/docs/web/api/servervalue/timestamp.html). – MandM

Powiązane problemy