Wie zu verwenden Meteor Methoden innerhalb einer template-helper
Wie kann ich definieren, eine Meteor Methode, die auch aufrufbar in einer Vorlage Helfer?
Habe ich diese beiden Dateien:
Datei: lib/test.js
Meteor.methods({
viewTest : function (str) {
return str;
}
});
Datei: client/myView.js
Template.helloWorld.helpers({
txt : function () {
var str = Meteor.call('viewTest', 'Hello World.');
return str;
}
});
Wenn ich "str" einen normalen string funktioniert alles einwandfrei. Aber in diesem Fall meine Vorlage nicht Wert. Ich definierte - für den test - in der gleichen Datei, in der die Methode ist eine normale Funktion und versucht die Funktion aufzurufen. Die Fehler, die ich bekam, war, dass die Funktion nicht vorhanden ist. Also ich denke, dass Meteor versucht zu Rendern der Vorlage, bevor er weiß etwas über die Methoden, die ich für Sie definiert. Aber ich denke, dass dies ein bisschen ungewöhnlich ist, ist es nicht?
InformationsquelleAutor TJR | 2014-03-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es nun eine neue Möglichkeit, dies zu tun (Meteor 0.9.3.1), die nicht verschmutzen die Session-namespace
In der 'erstellt' callback erstellen Sie eine neue Instanz einer ReactiveVariable (siehe docs) und befestigen Sie es an der template-Instanz.
Dann rufen Sie Ihre Methode und wenn der Rückruf feuert, befestigen Sie den zurückgegebenen Wert für die reaktive variable.
Können Sie dann richten Sie Ihre Helfer, um den Rückgabewert der reaktiven Variablen (die verbunden ist, um die template-Instanz jetzt), und es wird erneut ausgeführt, wenn die Methode zurückgibt.
Beachten Sie aber, müssen Sie die reaktiv-var-Paket, für Sie zu arbeiten
Ich denke, das ist der richtige Weg
Ist das nicht non-reaktive obwohl? Da die
ReactiveVar
wird nur aktualisiert, in dercreated
handler? Also, wennasyncValue
aktualisiert wird, wäre es nicht aktualisieren Sie Ihre Vorlage, es sei denn, es erfrischt...?Wahr... nur FYI ' Ing im Fall, dass die Menschen denken, es wäre automatisch reaktiv, da es mit einem template-helper (vielleicht jemand, der Meteor).
Toll, aber wie kann ich jetzt Durchlaufen, wenn ich bin immer ein Objekt von Objekten zurück? #jeder arbeitet arrays akzeptiert nur. Ich möchte in der Lage sein, Zugang zu Eigenschaften jedes Objektes bekomme ich kehrte mit meinem Anruf.
InformationsquelleAutor Petrov
Sashko Hinzugefügt ein nettes kleines Paket namens meteor-aktiv-Methode um dieses problem zu lösen.
Sobald ich in häufige Fehler, Helfer sein sollte, nebenwirkungsfreie, so würde ich diese Technik mit Vorsicht. Jedoch, es ist eine sehr praktische Abkürzung für die Fälle, wo:
InformationsquelleAutor David Weldon
Müssen Sie die Schnittstelle Ihres return-Wert mit einer Session-variable als die Anfrage asynchron:
So .gerendert sollte mal genannt werden, wenn Ihre Vorlage geladen wird (zumindest sollte es mit der neueren version der Meteor.)
Wäre der Wert aufgerufen und angezeigt. Sonst würde es sagen, "Laden".
haben Sie sich überlegt, nicht mit einem Meteor.call und eine Transformation mit einem lokalen Sammlung statt?
Lokale Sammlung ? Die Nutzung der Sammlung spielt keine Rolle in meinem Fall. Das problem ist, dass ich haben, um einen return-Wert vor der Vorlage wiedergegeben wird. Vielleicht ich nicht deine Frage verstanden ?
InformationsquelleAutor Akshat
Methoden auf der client-Seite sind asynchron, und Ihr Rückgabewert ist immer undefiniert. Um den tatsächlichen Wert der von der Methode zurückgegeben, müssen Sie eine callback:
Nun, es gibt keinen einfachen Weg, um das Ergebnis in Ihre Helfer. Jedoch, Sie können speichern Sie es in Ihre Vorlage ein Daten-Objekt und geben es dann zurück in die Helfer:
Danke Hubert, ich habe auf der Suche für eine Weile für etwas gab, dass template-spezifische Abhängigkeiten. Also, wenn die Vorlage geändert/zurück geladen werden die Abhängigkeiten geklärt zu?
Yup, das funktioniert für mich mit Template-spezifischen Abhängigkeiten. Ich habe etwas ähnliches aber gelöscht, mit zerstört zu
InformationsquelleAutor Hubert OG
Dies ist das erwartete Verhalten. Sie sind nicht mit
methods
wie Sie gedacht sind.Ihrem code definiert eine server-Methode
viewTest
und eine entsprechende Methoden-stub auf der client mit dem gleichen Namen.Meteor.call('viewTest', 'Hello World.');
aus der Ferne ruftviewTest
auf dem server und parallel läuft die stub an den client.Bezüglich der Rückgabewert der stub finden Sie in der Dokumentation hier, insbesondere:
Bezüglich der Rückgabewert der server-Methode finden Sie in der Dokumentation hier, insbesondere:
InformationsquelleAutor Tobold
Gibt es eine kleine, aber feine Paket für das von @msavin:
https://atmospherejs.com/msavin/fetcher
InformationsquelleAutor avalanche1