将 Meteor 复选框状态与数据库同步

Sync Meteor checkbox state with database

我的应用程序中有一个 复选框,我想做的是存储复选框的状态,即是否选中。一旦用户选中复选框,它就会将其存储到数据库中,下次他访问该页面时应该选中它。

我正在尝试使用会话,它在同一应用程序的不同页面上工作,但是一旦我重新加载页面,它就消失了。我想会话适用于临时数据。永久数据应该使用什么?

HTML

<template name="test">
    <input type="checkbox" id="check" checked="{{Checked}}"> 
</template>

JS

Template.Test.events({
    'click #check':function(e){
        Session.set('Checked', e.target.checked);
    }
})

Template.Test.helpers({
    Checked: function(){
        return Session.get("Checked");
    }
})

http://meteorpad.com/pad/u3D5TDaMDDg8Aw2ie/Leaderboard

How long do certain Meteor data sources live for?

由于此复选框设置已同步到已登录用户,因此您想将此设置保存到已登录用户。

HTML

<body>

    {{> loginButtons }}

    {{#if currentUser}} 
      {{> Test }}
    {{/if}}

</body>


<template name="Test">
  <div class="container">
    <div class="row">
      <div class="col-xs-8 col-xs-offset-2">
        <input type="checkbox" id="check" checked="{{isChecked}}"> 
      </div>
    </div>
  </div>
</template>

Meteor Users 集合有点特殊,您需要阅读它的功能

但是现在,您需要知道来自客户的信息:

  • 您可以通过Meteor.user()

  • 访问当前登录的用户
  • 默认情况下,Meteor 将 Meteor.user().profile 字段发布到客户端。

  • 从客户端,您只能编辑 Meteor.user().profile 字段。

  • 为了edit/update一个Meteor用户,你必须在Mongo[=16]中输入精确的userId(用户文档的ID) =] 命令 - Meteor.users.update({_id: userId}, {$set: {"profile.isChecked": isChecked}});

JS

Template.Test.events({
    'click #check':function(e){
      var userId = Meteor.user()._id;
      var isChecked = e.target.checked;
      Meteor.users.update({_id: userId}, {$set: {"profile.isChecked": isChecked}}); 
    }
})

Template.Test.helpers({
    isChecked: function(){
      return Meteor.user().profile.isChecked;
    }
})

Accounts.ui.config({
  passwordSignupFields: "USERNAME_ONLY"
});