2012-04-16 29 views
10

Tôi có một số mã tương tự như sau:Sự kiện Mẫu sao băng, cách nhận đối tượng gây ra sự kiện?

Trong 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> 

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

Trong tình huống này, tôi muốn nhận được id của mà phù hợp .problem-text và đã được nhấp.

Tôi muốn biết "đối tượng" đã tạo sự kiện? Làm thế nào để tôi làm điều này?

+0

Mỗi tài liệu Meteor, họ nhận dữ liệu mẫu hiện tại trong đối tượng 'this'. –

Trả lời

6

Hãy thử điều này:

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

Bạn có thể truy cập vào các đối tượng có vấn đề với tài liệu tham khảo này:

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

Tôi upvoted, bởi vì đây là câu trả lời thực sự. Sử dụng phiên cho một điều như vậy là một hack. – cmgriffing

+0

Không chắc chắn, tham chiếu "này" sẽ cung cấp cho bạn dữ liệu từ đối tượng được trình trợ giúp thu thập. Tôi nghĩ câu hỏi này có liên quan nhiều hơn đến cách lấy đối tượng html. Trong trường hợp đó "event.target" là đúng cách. Tuy nhiên là tốt đẹp để có trong tâm trí cả hai phương pháp tiếp cận. Đôi khi "hack phiên" được sử dụng khi bạn muốn kết xuất lại từ dữ liệu phản hồi. –

19

Câu trả lời được lựa chọn cho câu hỏi này sẽ chỉ nhận được _id, và điều đó quá nếu _id được sử dụng trong các mẫu.

Vì vậy, sử dụng tốt hơn, event.target, sẽ cung cấp cho đối tượng COMPLETE. Vì vậy, có thể được sử dụng với jQuery hoặc 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

Chỉ để ngăn chặn một số lỗi. Lưu ý rằng việc sử dụng event.target sẽ cung cấp cho bạn phần tử được nhấp, vì vậy trong ví dụ này, nó có thể trả về một khoảng thời gian là một đứa trẻ trên liên kết. Sử dụng event.currentTarget để nhận phần tử mà bạn đang nghe. – Salketer

Các vấn đề liên quan