Meteor:没有#each循环事件处理程序的上下文

时间:2016-03-13 13:13:23

标签: meteor spacebars

我使用带有非托管本地集合的#each循环来为表单生成一系列输入字段。但是,当我尝试在事件处理程序中使用select * from table1 where PersonID IN ( SELECT MIN(PersonID) AS MinID FROM table1 GROUP BY City ) 时,它是未定义的。实际上,传递给事件处理程序的上下文是针对窗口的。任何有助于找到问题的帮助以及我应该如何在我的事件处理程序中获得int? myFavoriteNumber = 42; total += (myFavoriteNumber.Value!=null)? myFavoriteNumber.Value*2 : 0; 的正确上下文非常感谢。

代码是:

this._id

和js:

this

使用addChild按钮一切正常,并且<h4 class="page-header">Children on this account</h4> {{#each children}} <div id={{_id}} class="form-group col-md-12 child-form-instance"> <div class="form-group col-sm-5 col-xs-12"> <input type="text" name="childFirstName" class="form-control" placeholder="Child's First Name"> </div> <div class="form-group col-sm-5 col-xs-10"> <input type="text" name="childLastName" class="form-control" placeholder="Child's Last Name" value="{{_id}}"> </div> <div class="form-group col-xs-2"> <button type="button" class="btn btn-danger remove-child" aria-label="remove child"> <span class="glyphicon glyphicon-trash"></span> </button> </div> </div> {{/each}} <div class="form-group"> <input type="button" id="addChild" class="btn btn-success" value="Add child"> </div> 在DOM中正确分配,但remove-child类正在记录var children = new Mongo.Collection(null); Template.signup.onRendered( () => { Modules.client.signupValidateSubmit({ form: "#signup", template: Template.instance() }); children.remove({}); children.insert({}); //create one empty child }); Template.signup.events({ 'submit form': ( event ) => event.preventDefault(), 'click #addChild': () => { children.insert({}); console.log(children.find().fetch()); }, 'click .remove-child': () => { console.log(this); } }); Template.signup.helpers({ children () { return children.find(); } }); 上下文。

1 个答案:

答案 0 :(得分:2)

您正在使用ES6 arrow functions,它将this与父作用域进行词汇绑定。因此,您无法获得children的范围。

要解决此问题,只需将模板事件更改为:

Template.signup.events({
    // ...
    'click .remove-child': function (event, template) {
        console.log(this);
    }
    // ...
});