我只是在玩不同的模式,对编程非常陌生,但到目前为止,我的测试应用程序中除了这个之外,其他一切都可以工作。我尝试了很多变体,但运气不佳,但我怀疑我错过了一些非常简单的东西。
基本上,我希望用户单击一个按钮,然后更新当前对象的两个特定属性的值。
在这个例子中,我希望当用户单击"返回"按钮时进行更新(下面显示的其他按钮工作正常)。
以下是有问题的按钮的HTML模板:
<template name="bookDetails">
<div class="post">
<div class="post-content">
<h3>{{title}}</h3><span> {{author}}</span>
{{#if onLoan}}
<i class="fa fa-star"></i>
On loan to: {{lender}}{{/if}}
</div>
{{#if ownBook}}
<a href="{{pathFor 'bookEdit'}}" class="discuss btn">Edit</a>
<a href="{{pathFor 'bookLoan'}}" class="discuss btn">Lend</a>
<div class="control-group">
<div class="controls">
<a class="discuss btn return" href="">Return </a>
</div>
</div>
{{/if}}
</div>
</template>
这是包含我的Template事件的.js文件。基本上,我想设置"lendstatus"one_answers"lender"属性的值。
Template.bookDetails.helpers({
ownBook: function() {
return this.userId == Meteor.userId();
},
onLoan: function() {
return this.lendstatus == 'true';
}
});
Template.bookLoan.events({
'click .return': function(e) {
e.preventDefault();
var currentBookId = this._id;
var bookProperties = {
lendstatus: "false",
lender: "",
}
Books.update(currentBookId, {$set: bookProperties}, function(error) {
if (error) {
// display the error to the user
throwError(error.reason);
} else {
Router.go('bookPage', {_id: currentBookId});
}
});
},
});
如果我在id为ZLDvXZ9esfp8yEmJu的对象的页面上,在浏览器控制台中键入以下内容,我会在屏幕上得到正确的行为,数据库会更新,这样我就知道我已经接近了:
Books.update({ _id: "ZLDvXZ9esfp8yEmJu"}, {$set: {lendstatus: "false", lender: ""}});
我错过了什么?
OK-所以我的问题是我在错误的模板中定义了事件处理程序。我在bookLoan模板中定义了它,而不是在bookDetails模板中。感谢@saimeunt指出这一点!