2012-04-16 4 views
10

Ich habe einige Code ähnlich der folgenden:Meteor Template-Ereignisse, wie erhält man ein Objekt, das ein Ereignis ausgelöst hat?

In meineanw.html

<template name="problems"> 
    <div class="problems"> 
     {{#each problems}} 
      {{> problem}} 
    {{/each}} 
    </div> 
</template 

<template name="problem"> 
    <div class="problem"> 
     <div class="problem-text" id={{_id}}>{{text}}</div> 
    </div> 
</template> 

In myapp.js

Template.problem.events = { 
'click .problem-text' : function() { 

     var user_id = Session.get('user_id'); 

     // how to get problem_id of clicked item? 
     Router.gotoProblem(user_id, problem_id);  
    } 
}; 

In dieser Situation, die ich die ID der erhalten möchten, die abgestimmt .problem-text und wurde angeklickt.

Ich möchte das "Objekt" wissen, das das Ereignis generiert hat? Wie mache ich das?

+0

Per Meteor-Dokumentation erhalten sie die aktuellen Schablonendaten im Objekt 'this'. –

Antwort

6

Versuchen Sie folgendes:

Template.problem.events = { 
'click .problem-text' : function() { 

     var user_id = Session.get('user_id'); 

     // how to get problem_id of clicked item? 
     Router.gotoProblem(user_id, this._id);  
    } 
}; 
5

Sie das Problem Objekt mit Zugriff auf diese Referenz:

Template.problem.events = { 
    /** 
    * Handles problem text click. 
    * @param {jQuery.Event} event 
    */ 
    'click .problem-text' : function (event) { 
     /* 
     Here this is a reference to the problem object 
     and you have jQuery.Event object as the event argument. 
     */ 
     console.log(this, arguments); 

     var user_id = Session.get('user_id'); 
     var problem = this; 

     // how to get problem_id of clicked item? 
     Router.gotoProblem(user_id, /** problem_id */problem._id); 
    } 
    }; 
+1

Ich habe die Antwort geändert, weil dies die richtige Antwort ist. Die Sitzung für so etwas zu benutzen ist ein Hack. – cmgriffing

+0

Nicht sicher, "diese" Referenz gibt Ihnen die Daten von dem Objekt, das vom Helper abgerufen wird. Ich denke, diese Frage hängt mehr damit zusammen, wie man das HTML-Objekt bekommt. In diesem Fall ist "event.target" der richtige Weg. Es ist jedoch schön, beide Ansätze zu berücksichtigen. Manchmal wird der "Session-Hack" verwendet, wenn Sie reaktive Daten erneut rendern möchten. –

19

Die gewählte Antwort auf diese Frage wird nur die _id bekommen, und das auch, wenn _id wird in Vorlagen verwendet.

Also besser verwenden, event.target, die COMPLETE Objekt geben wird. So kann das mit jQuery oder MooTools verwendet werden.

Template.top_nav.events({ 
'mousedown, .nav li a': function(evt){ 
    console.log('the class of object that was clicked is ' + $(evt.target).attr("class")); 
} 
}) 
+2

Nur um einige Fehler zu vermeiden. Beachten Sie, dass die Verwendung von event.target Ihnen das angeklickte Element liefert. In diesem Beispiel könnte also ein Bereich zurückgegeben werden, der ein untergeordneter Wert für den Link ist. Verwenden Sie event.currentTarget, um das Element zu empfangen, auf dem Sie gerade hören. – Salketer

Verwandte Themen