在下面的代码中,我试图了解这行代码
Resolutions.update(this._id, {$set:{checked: !this.checked}});
这是我收集的内容,请纠正我;
update - 是一个在Mongodb集合上调用的方法。
this._id - The selection criteria for the update.
这个 - 是Template.body.helpers上下文
_id - 是mongodb中的项目。
{$ set:{checked:!this.checked}} - The update parameter
$ set: - 是一个mongodb运营商
已检查 - 要更新或创建的字段(如果不存在)
!this.checked - 这有效,但我希望它是!this._id.checked ,以便否定已检查的值。
感谢
Resolutions = new Mongo.Collection('resolutions');
if (Meteor.isClient) {
Template.body.helpers({
resolutions: function() {
return Resolutions.find();
} });
Template.body.events({
'submit .new-resolution': function(event) {
var title = event.target.title.value;
Resolutions.insert({
title: title, createdAt: new Date()
});
event.target.title.value = "";
return false;
}
});
//object
Template.resolution.events({
//property1
'click .toggle-checked': function(){
//call update method on Mongo object
Resolutions.update(this._id, {$set:{checked: !this.checked}});
},
//property2
'click .delete': function(){
Resolutions.remove(this._id);
}
})
}
if (Meteor.isServer) {
Meteor.startup(function () {
// code to run on server at startup
});
}
<head>
<title>resolutions</title>
</head>
<body>
<form class="new-resolution">
<input type="text" name="title" placeholder="a new customer">
<input type="submit" value="Submit">
</form>
<ul>
{{#each resolutions}}
{{> resolution}}
{{/each}}
</ul>
</body>
<template name="resolution">
<li>
<input class="toggle-checked" type="checkbox" checked="{{checked}}">
{{title}}
<button class="delete">Remove</button>
</li>
</template>
答案 0 :(得分:0)
this
实际上将成为来自MongoDB的Resolution对象之一。你的帮助者说返回所有Resolutions对象,你的模板说是为每个对象渲染一个分辨率模板。因此,采用this
上下文的示例对象可能是:
{
"_id": "abcdefg",
"title": "Sample Title",
"checked": true
}
所以当你进行更新时,你用英语说的是:
Resolutions.update(this._id, ...)
- 更新Resolutions集合中的内部标识(_id)等于this._id
的文档。在我的例子中,那将是“abcdefg”。下一部分描述了我们将如何实际更新文档。
{$set:{checked: !this.checked}}
- 设置Resolutions集合中这些文档的值,使checked属性等于this.checked
的反面。在上面的示例中,我们将值设置为false
。
你不需要this._id.checked的原因是你的对象的结构如上所述 - this._id.checked将是未定义的。