2012-04-16 13 views
10

मैं कुछ करने के लिए इसी तरह के कोड है निम्नलिखित:उल्का टेम्पलेट घटनाओं, घटना के कारण वस्तु कैसे प्राप्त करें?

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);  
    } 
}; 

इस स्थिति में में 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> 

मुझे लगता है कि मेल नहीं खाते की आईडी प्राप्त करना चाहते हैं .problem-text और क्लिक किया गया था।

मैं "ऑब्जेक्ट" को जानना चाहता हूं जो घटना उत्पन्न करता है? मैं यह कैसे करु?

+0

प्रति मीटरी दस्तावेज, उन्हें 'इस' ऑब्जेक्ट में वर्तमान टेम्पलेट डेटा प्राप्त होता है। –

उत्तर

6

इस प्रयास करें:

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

आप इस संदर्भ के साथ समस्या यह वस्तु का उपयोग कर सकते हैं:

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

मैंने ऊपर उठाया, क्योंकि यह वास्तविक जवाब है। ऐसी चीज के लिए सत्र का उपयोग करना एक हैक है। – cmgriffing

+0

सुनिश्चित नहीं है, "यह" संदर्भ आपको सहायक द्वारा पुनर्प्राप्त ऑब्जेक्ट से डेटा देगा। मुझे लगता है कि एचटीएमएल ऑब्जेक्ट कैसे प्राप्त करें इस सवाल से अधिक संबंधित है। उस स्थिति में "event.target" सही तरीका है। हालांकि दोनों दृष्टिकोणों को ध्यान में रखना अच्छा है। कभी-कभी "सत्र हैक" का उपयोग तब किया जाता है जब आप प्रतिक्रियाशील डेटा से पुनः प्रस्तुत करना चाहते हैं। –

19

इस प्रश्न के लिए चयनित जवाब केवल _id मिल जाएगा, और वह भी अगर _id टेम्पलेट्स में प्रयोग किया जाता है।

तो बेहतर उपयोग करें, event.target, जो पूर्ण ऑब्जेक्ट देगा। तो इसका उपयोग jQuery या 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

बस कुछ त्रुटियों को रोकने के लिए। ध्यान दें कि event.target का उपयोग करके आप तत्व को क्लिक करेंगे, इसलिए इस उदाहरण में यह लिंक पर एक बच्चा है जो एक अवधि वापस कर सकता है। उस तत्व को प्राप्त करने के लिए event.currentTarget का उपयोग करें जिस पर आप सुन रहे हैं। – Salketer

संबंधित मुद्दे