2012-04-16 2 views
10

Ho qualche codice simile al seguente:Eventi modello Meteor, come ottenere l'oggetto che ha causato l'evento?

In myapp.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 questa situazione voglio ottenere l'id del che ha abbinato .problem-text ed è stato cliccato.

Mi piacerebbe conoscere l'oggetto che ha generato l'evento? Come faccio a fare questo?

+0

Per documentazione di Meteor, ricevono i dati del modello corrente nell'oggetto "questo". –

risposta

6

Prova questo:

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

È possibile accedere all'oggetto problema con questo di riferimento:

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

Ho upvoted, perché questa è la vera risposta. Usare la sessione per una cosa del genere è un trucco. – cmgriffing

+0

Non sono sicuro che "questo" riferimento fornirà i dati dall'oggetto recuperato dall'help. Penso che questa domanda sia più legata a come ottenere l'oggetto html. In tal caso "event.target" è la strada giusta. Comunque è bello avere in mente entrambi gli approcci. A volte la "sessione hack" viene utilizzata quando si desidera eseguire nuovamente il rendering dai dati reattivi. –

19

La risposta selezionata per questa domanda sarà solo ottenere il _id, e che anche se _id è usato nei modelli.

Quindi, meglio usare, event.target, che darà oggetto COMPLETO. In modo che possa essere utilizzato con jQuery o MooTools.

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

Solo per evitare alcuni errori. Tieni presente che l'utilizzo di event.target ti darà l'elemento su cui è stato fatto clic, quindi in questo esempio potrebbe restituire una spanna che è un figlio sul link. Utilizzare event.currentTarget per ricevere l'elemento su cui si sta ascoltando. – Salketer