Meteor Template事件,如何获取导致事件的对象?

Jos*_*itt 10 meteor

我有一些类似于以下代码:

在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> 
Run Code Online (Sandbox Code Playgroud)

在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);    
    }
};
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想获得匹配的.problem文本的id并被点击.

我想知道产生这个事件的"对象"?我该怎么做呢?

Hit*_*shi 19

这个问题的选定答案只会获得_id,如果_id在模板中使用的话也是如此.

所以更好的使用,event.target将给出COMPLETE对象.这样可以与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"));
 }
})
Run Code Online (Sandbox Code Playgroud)

  • 只是为了防止一些错误.请注意,使用event.target将为您提供单击的元素,因此在此示例中,它可以返回链接上的子节点.使用event.currentTarget接收您正在侦听的元素. (2认同)

Tho*_*mas 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);    
    }
};
Run Code Online (Sandbox Code Playgroud)


小智 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);
    }
  };
Run Code Online (Sandbox Code Playgroud)