2013-06-21 5 views
47

Ich habe einen Helfer wieMeteor, wie man von einem anderen Helfer auf einen Helfer zugreift?

Template.user_profile.helpers({ 
    user:function() { 
    return Meteor.users.find({'profile.front_name':Session.get('slug')}).fetch()[0]; 
    } 
}); 

ich einen Helfer zur Sammlung hinzugefügt werden soll, die die user Helfer zugreifen können und vergleichen ihre _id mit dem aktuellen Benutzer _id, zu sagen, ob der Benutzer ein eigenes Profil besucht. Ich bin mit etwas ziemlich hässlich:

Template.user_profile._tmpl_data.helpers.user() 

Der endgültige Code:

Template.user_profile.helpers({ 
    user:function() { 
    return Meteor.users.find({'profile.front_name':Session.get('userId')}).fetch()[0]; 
    }, 
    isCurrentUser: function() { 
    return Template.user_profile._tmpl_data.helpers.user()._id === Meteor.userId(); 
    } 
}); 

Gibt es einen besseren Weg, einen anderen Helfer zugreifen?

Antwort

2

Sie müssen vielleicht nicht einmal einen solchen Helfer anrufen. Es gibt einen current Helfer bereits eingebaut

http://docs.meteor.com/#template_currentuser

{{currentUser}} 
+0

Ich möchte überprüfen, ob das Profil der Benutzer besucht seine eigene ist. –

+0

das war nicht die Fragen ... – SsouLlesS

0

vielleicht ist dies für Sie arbeiten würde.

//js 
Template.foo.helpers({ bar: function() { 
return this.userId == Meteor.userId(); }, 
domain: function() { 
var a = document.createElement('a'); a.href = this.url; 
return a.hostname; 
} }); 

ownsDocument = function(userId, doc) { return doc && doc.userId === userId;} 

Posts = new Meteor.Collection('posts'); 
Posts.allow({ 
update: ownsDocument, remove: ownsDocument 
}); 

    //html 
{{#if bar}}<a href="{{pathFor 'postEdit'}}">Edit</a>{{/if}} 
+0

(um zu überprüfen, ob Benutzer seinen eigenen besucht -> ersten Teil und HTML), und dann, wenn Sie bearbeiten würde, der zweite Teil – GeriTol

4

Als ich nach einem Weg suchte einen Helfer von einem anderen Helfer zu rufen, Ich habe festgestellt, dass Meteor 1.0 "Template.registeredHelpers" definiert, die allen anderen Helfern zur Verfügung stehen. https://docs.meteor.com/#/full/template_registerhelper

Template.registerHelper("checkedIf",function(value){ 
    return value?"checked":""; 
}); 
+0

Ich habe versucht, Template.registerHelper in einem separaten Helfer zu verwenden .js-Datei, die alle diese Helfer enthält, aber wenn ich versuche, sie in einem anderen Template-Event aufzurufen, hilft das nicht. Es stellt sich also die Frage, ob solche Helfer in Ereignissen aufgerufen werden können. ' Template.registerHelper (" checkedIf ", Funktion (Wert) { Rückgabewert?" Checked ":" "; }); Template.myform.events ({ ) "senden .js-save-element: function (event) { Konsole.log ('Aufrufender Helfer:' + checkedIf ('testring')); } }); ' hier bekomme ich Fehler' ReferenceError: checkedIf ist nicht definiert.' – Jay

+0

Hey, ich denke, es gibt eine Verwirrung, was ist ein Helfer hier. Ein Helfer ist eine Funktion, die aus der Vorlage aufgerufen wird (dh die .html-Datei, wenn Blaze verwendet wird). Sie können nicht auf die Helfer (die Informationen in Ihre Vorlage einspeisen) von einem Ereignis zugreifen (das Informationen aus der Vorlage verarbeitet). Ein hacky Weg könnte Blaze._globalHelpers ['checkedIf']() sein, aber da es ein "undokumentiertes"/internes Feature ist, wird es in zukünftigen Versionen möglicherweise nicht unterstützt. Was ist mit der Definition Ihrer Methode außerhalb der Template-System (global oder file-scoped) und rufen Sie es einfach von beiden Orten, die Sie brauchen –

+0

eigentlich habe ich so etwas tun nur - Old School Art. In meinem utils.js habe ich gerade eine globale Bereichsfunktion definiert und dann Ich kann es in beiden aufrufen - Helfer & Ereignisse. Ich dachte mehr in Sachen How-to-do-Meteor-Weg? (Falls vorhanden). Wie auch immer, danke für Ihre Erklärung. – Jay

32

Ich habe gerade zufällig diese in der Konsole entdeckt:

Template.registerHelper 
function (name, func) {                    
    Blaze._globalHelpers[name] = func;                     
} 

So Blaze._globalHelpers ist das, was wir suchen!

+1

Fantastisch! Ich wünschte, ich könnte dies mehr aufwerten – foobarbecue

+0

Endlich eine echte Antwort unter all den Google-Ergebnissen gefunden. –

10

Sie können eine Vorlage Helfer nennen (nicht global Helfer - die in outluch Antwort ist) mit:

Template.tplName.__helpers.get('helper').call() 

MDG schlägt eine reguläre Funktion und es dann an Helfer vorbei, Veranstaltungen und so weiter. Siehe here.

-Update 16.06.16
Eigentlich rate ich einfach stark manuel:viewmodel verwenden - es so viele Blaze Kopfschmerzen lindert ...

Verwandte Themen