用this._id引用meteor mongodb中的项目

时间:2016-01-31 23:03:16

标签: mongodb meteor

在下面的代码中,我试图了解这行代码 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>

1 个答案:

答案 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将是未定义的。