2014-02-17 13 views
6

Ich habe versucht, einen Cursor als eine Sitzungsvariable zu setzen sieht aus wie es nicht funktioniert.Können wir den Cursor als Sitzungsvariable setzen?

Jeder hat eine Idee ??

Mein Code:

Meteor.call('apiresult',function(e,result) 
    {            
    console.log(result); 
    Session.set("object",result)                           
    }); 

//getting variable 
var abc=Session.get("object"); 
return abc.skimlinksProductAPI.numFound;   

sieht aus wie es nicht funktioniert

+0

Methodenergebnisse und Session-Variablen sollten EJSON-kompatible Typen sein. Lesen Sie über EJSON hier: http://docs.meteor.com/#ejson – sbking

+0

mein Ergebnis ist JSON-Typ immer noch, warum es nicht funktioniert – Sasikanth

+1

Cursors sind nicht EJSON-fähig. Die einzigen Typen, die EJSON standardmäßig unterstützt, sind Primitive (Strings, Booleans, Zahlen), einfache, nicht typisierte Objektliterale, Arrays und die wenigen typisierten Objekte, die das Meteor-Team EJSON-kompatibel gemacht hat - 'Date', binäre Typen wie' Uint8Array 'und' Meteor.Collection.ObjectID'. Andere Typen wie Cursor, 'HTMLElement', jQuery-Objekte usw. sind nicht EJSON-fähig, daher können sie nicht als Argumente/Rückgabewerte für Methoden verwendet oder in Session-Vars gespeichert werden. Sie werden stattdessen als grundlegende JSON-Objekte ohne jegliche Typinformationen (Prototyp, Konstruktor, Methoden) gesendet. – sbking

Antwort

5

Cursor kann tatsächlich in Session gespeichert werden ... manchmal. Öffnen Sie die leaderboard app und versuchen, dies im Browser-Konsole:

> Session.set ('MyCursor', Players.find());
undefined
> Session.get ('MyCursor')
LocalCollection.Cursor {collection: LocalCollection, selector_f: Funktion, sort_f: null, Überspringen: undefiniert, limit: undefined ...}
> Session.get ('MyCursor ‚) .fetch()
[Objekt, Objekt, Objekt, Objekt, Objekt]

nun die code of the leaderboard example app herunterladen, nutzt den neuesten Meteor, und das gleiche tun, was in der Browser-Konsole. Sie könnten erhalten:

enter image description here

Die Moral der Geschichte zu sein scheint, speichern keine Cursor in Session-Variablen. Speichern Sie stattdessen the Minimongo selector and options (sort, fields usw.) als Objekte.

3

interessanten Gedanken. Es wäre jedoch nicht erforderlich, da ein Cursor bereits reaktiv ist. Sie können den Cursor in einer gewöhnlichen Variablen speichern.

Eine Sache, um darauf hinzuweisen ist jedoch, dass Sie keine Cursor senden können mit Meteor.call, können Sie Javascript-Objekte senden oder geben Sie Ihre eigenen EJSON, aber Sie könnten dies nicht mit Cursors tun.

So können Sie speichern Cursor in globalen Variablen, wenn Sie die .find tun() lokal, aber man kann es auf dem Server tun, dann übertragen Sie den Cursor Meteor.call mit

können Sie eine verwenden Publish/Funktion abonnieren dafür stattdessen.

Verwandte Themen