2013-02-23 25 views
5

Zaktualizowałem mój meteoryt wczoraj i próbowałem używać nowego Meteor.Collection.ObjectID. Ale od bez powodzenia. Najpierw zaktualizowane moje zbiory w ten sposób:meteor 0.5.7: jak obsługiwać/używać Meteor.Collection.ObjectID?

myCollection = new Meteor.Collection('mycollection', {idGeneration: 'MONGO'} Teraz normalne nowe wkładki mają _id jak Wi2RmR6CSapkmmdfn ...

Wtedy mam kolekcję z tablicą wliczone (?). Lubię mieć unikalny identyfikator dla każdego obiektu w tej tablicy. Więc i $push obiekt z polem jak id: new Meteor.Collection.ObjectID() do mojej tablicy. Wynik w bazie danych wygląda następująco: ObjectId("5b5fc278305d406cc6c33756"). (Wydaje się to normalne.)

Ale później chcę zaktualizować mój pushed obiekt, jeśli id jest równy id, który wcześniej zapisałem jako atrybut danych w znaczniku HTML.

var equals = EJSON.equals(dbId, htmlId); (Powoduje to za każdym razem w false Więc zalogowany wartości dbId i htmlId do konsoli z console.log(typeof dbId, dbId);.)

Wartości tych dwóch zmiennych jest w następujący sposób:

object { _str: 'a86ce44f9a46b99bca1be7a9' } (dbid)

string ObjectID("a86ce44f9a46b99bca1be7a9") (htmlId, to wydaje się być poprawne, ale dlaczego jest zwyczaj wpisać ciąg?)

Jak poprawnie używać Meteor.Collection.ObjectID?

Odpowiedz

8

przy składaniu htmlId w html trzeba umieścić go w postaci ciągu znaków, a nie jako przedmiot, pamiętaj _id jest obiektem teraz, kierownica jest zgadywania i używania toString() & to dlaczego pokazuje się jako ObjectID("...").

Więc jeśli używasz {{_id}} w html teraz trzeba użyć {{_id.toHexString}} poprawnie wyodrębnić część ciąg ją

Kiedy wyodrębnić tę wartość HTML z javascript trzeba wykonać go z powrotem do objectID:

JS:

var valuefromhtml = "a86ce44f9a46b99bca1be7a9"; //Get with Jquery,DOM,etc 

htmlId = new Meteor.Collection.ObjectID(valuefromhtml); //see: http://docs.meteor.com/#collection_object_id 

EJSON.equals(htmlId, dbId); //Should be true this time  
+0

** Dziękuję za szybką odpowiedź! :) ** Btw: '{{_id.toHexString}}' nie działa bezpośrednio, ale zarejestrowałem globalnego pomocnika handlebarów, który wykonuje to zadanie. –

+0

Powinien działać bez pomocy, testowałem go przed wysłaniem, czy masz inny identyfikator obiektu Meteor 0,57? – Akshat

+4

Hmm ... Usunąłem moje kolekcje, ale mój helpler pomocniczy do debugowania, który wypisuje daną wartość w konsoli, nic nie wypisuje, gdy nazywam go '{{debug _id.toHexString}}'. Spojrzałem na źródła minimongo i '{{_id._str}}' działa bezpośrednio ('ObjectID.toHexString()' zwraca '_str') –